java socket 客户端和服务端通信

时间:2022-09-15 22:15:17

1.采用阻塞式readUTF();长连接

2.java socket的3个主要方面如下

  1)accept 阻塞,直到接受到一个连接,并返回一个客户端对象实例

  2)getInputStream()

  3)getOutputStream()

客户端代码:

public class ClientSocket {
    
    public static final String IP="10.100.63.18";
    public static final int PORT=667;
    
    public static void main(String[] args){
        
        System.out.println("客户端启动...");
        
        while(true){
            Socket socket=null;
            
            try{
                socket=new Socket(IP,PORT);
        //        socket.setSoTimeout(2000);
                        
                DataOutputStream out=new DataOutputStream(socket.getOutputStream());
                String send="Hello";
                out.writeUTF(send);//客户端发送到服务端
        //        Thread.sleep(2000);
                DataInputStream in=new DataInputStream(socket.getInputStream());
                System.out.println("客户端接收到:"+in.readUTF());
//            
                out.close();
                in.close();
            }catch(Exception e){
                System.out.println("客户端异常");
            }finally{
                if(socket!=null){
                    
                    try{
                        socket.close();
                    }catch(IOException e){}
                }
            }
        }
    }
}

 

服务端代码:

public class Server {

    public static int PORT=667;
    
    public static void main(String[] args){
        
        System.out.println("服务器启动...");
        Server server=new Server();
        server.init();
    
    }
    
    private void init() {
        // TODO Auto-generated method stub
        ServerSocket sock = null;
        try{
            sock=new ServerSocket(PORT);
            while(true){
                
                Socket Client=sock.accept();
            
                new HandlerThread(Client);
                
            }
        }catch(Exception e){
            
        }finally{
            if(sock!=null){
            try {
                sock.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            }
        }
    }

    private class HandlerThread implements Runnable{
        private Socket sc;
        public HandlerThread(Socket client){
        
            sc=client;
//            try {
//                sc.setSoTimeout(1000);
//            } catch (SocketException e) {
//                // TODO Auto-generated catch block
//                e.printStackTrace();
//            }
            new Thread(this).start();
        }
        @Override
        public void run() {
            // TODO Auto-generated method stub
            try{
                
                DataInputStream input=new DataInputStream(sc.getInputStream());
                System.out.println("处理客户端数据:"+input.readUTF());
                DataOutputStream output=new DataOutputStream(sc.getOutputStream());
            
                String s="Hello,I have received your message";
                output.writeUTF(s);
                output.close();
                input.close();
                
            }catch(EOFException e){
                System.out.println("服务器EOFException异常");
            }catch(IOException e){
                System.out.println("服务器EOFException异常");
            }finally{
                if(sc!=null){
                    try{
                        sc.close();
                    }catch(Exception e){
                        sc=null;
                        
                    }
                }
            }
        }} 
}

 运行结果:(先运行server,在运行client)

处理客户端数据:Hello
处理客户端数据:Hello


客户端接收到:Hello,I have received your message
客户端接收到:Hello,I have received your message