ShopJsp 最专业权威的商城系统提供商,最适合二次开发的商城系统! 快速联系通道    电话:010-62910181  手机:18611625933   QQ:94367128

java客户端连接服务器问题

2016-09-06  来源:华宇盈通

  一般服务器都是为多个客户端来服务的,所以当存在很多个不同的客户端时,java客户端与服务器进行连接的同时就会出现一定的问题。很多的时候服务器会出现不处于监听的状态,当有一个用户在客户端进行连接时,另一个客户端就会连接上来,这样另一个客户端就会出现一系列的问题。这样的问题其实就是一个多用户连接的问题,我们需要为每个客户端与服务器的链接建立一个独立的线程,通过一个连接池来实现,最终使每个客户端与服务器之间的链接都能够独立运行,不互相干扰。

    线程实现独立运行的方法有两种,一是通过自定义线程类集成Thread,并重现run()方法;二是通过定义一个普通类,来实现Runnable接口。下面我们就采用第二种方法,定义普通类实现Runnable接口来实现多线程控制:

java客户端连接服务器问题

    首先,我们自定义的普通类的代码如下:

public class ThreadManager implements Runnable{

    private Socket socket;
   
    public ThreadManager(Socket s){
        this.socket = s;
    }
    @Override
    public void run() {
        BufferedWriter bw;
        BufferedReader br;
        try {
            bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
            br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
           //不断发送信号给客户端,如果客户端一次链接后,发送的信息独立,那么表示独立线程实现
       for(int i = 0; i<1000000;i++){
        bw.write(i+"````````````````");
        bw.newline();
        bw.flush();
        }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }  
    }

}


    服务器端的代码如下:

public static void main(String[] args) {
        try {
            ServerSocket serverSocket = new ServerSocket(1888);
           
            while (true) {
          //监控是否有客户端连接
                Socket s = serverSocket.accept();
                //每次有新的客户端链接到服务器时,分别为他们创立独立线程
                Thread ch = new Thread(new ThreadManager(s));
                ch.start();
            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }


    客户端的代码如下:

public static void main(String[] args) {
        try {
        //向服务器端发送请求,服务器IP地址和服务器监听的端口号
            Socket s = new Socket("127.0.0.1",1888 );
           
            BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
            BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
            String line;
        while(true){
            while ((line = br.readLine())!=null) {
                //输出从服务器收到的信息
          System.out.println(line);
            }
        }
   
        } catch (UnknownHostException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }   
    }

    本文中,有几个需要注意的知识点:

    1、服务器和客户端交流大多是通过I/O流的方式

    2、服务器和客户端的对接,是通过套接字来完成。套接字(socket)用于描述IP地址和端口,链接也是通过IP地址和端口号来建立的。

    3、客户端和服务器端通过socket发送消息和接受消息的过程:

    发送消息:

java客户端连接服务器问题

    接收消息:

java客户端连接服务器问题

    以上就是java客户端链接服务器的一些问题,希望对你有一定的帮助。有任何java开发相关问题也欢迎和我们共同探讨,您也可以通过我们的技术交流栏目获取更多相关资料。

    

 
在线咨询