Java Socket之单线程通信


Java Socket之单线程通信
    博客分类:
  • java
  • java基础
java java基础 socket 网络编程 

1、 服务器端处理流程

    接触一种技术,首先都要熟悉它的生命周期,这样才能从大局上看每个流程的细节。才有居高临下,势如劈竹的架势。加深我们对这种技术的理解。现在来看看socket服务器的生命周期。   

    socket程序,一般情况下,都是服务器与客户端成双成对出现。

    服务器端socket的生命周期为:监听服务器端口,接受客户端连接,获取客户端输入、输出流,处理业务逻辑、发送响应信息,关闭客户端连接,关闭服务区监听。详情如下所示:

 

Java Socket之单线程通信_第1张图片2、 客户端处理流程

    socket程序的客户端的处理流程与服务器的相似,生命周期为:创建客户端socket,获取服务器输入、输出流,处理业务逻辑、发送相应信息、关闭客户端连接。详情如下所示:

 

Java Socket之单线程通信_第2张图片
3、 实例代码

    首先是写一个Server类,这个类用来监听9999端口,并从这个端口接收消息然后输出,当收到“bye”时退出。

Java代码 复制代码  收藏代码
  1. public class MyServer {  
  2.   
  3.     public static void main(String[] args) throws IOException {  
  4.         int port = 9999;  
  5.           
  6.         // 监听服务器端口  
  7.         ServerSocket server = new ServerSocket(port);  
  8.         System.out.println("listening on " + port);  
  9.           
  10.         while (true) {  
  11.             // 接受一个客户端连接  
  12.             Socket socket = server.accept();  
  13.             System.out.println("---------------------------");  
  14.             System.out.println("the client " + socket.getInetAddress().getHostAddress() + " has connected!");  
  15.               
  16.             // 获取客户端的输入流  
  17.             BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));    
  18.             // 获取客户端的输出流  
  19.             PrintWriter out = new PrintWriter(socket.getOutputStream());  
  20.               
  21.             String msg = in.readLine();  
  22.             System.out.println("Server received " + msg);  
  23.               
  24.             if (msg.equals("bye")) {  
  25.                 System.out.println("Server stoped!");  
  26.                 break;  
  27.             } else {  
  28.                 // 想客户端发送信息  
  29.                 System.out.println("Server send " + msg);  
  30.                 out.print("Server received " + msg);  
  31.                 out.flush();  
  32.             }  
  33.             socket.close();  
  34.         }  
  35.         server.close();  
  36.     }  
  37.   
  38. }  

 

   然后是一个Client类,这个类连接上面启动的Server类,然后接收任何用户输入,当遇到回车时发送字符串到Server上,当输入“bye”是退出。

Java代码 复制代码  收藏代码
  1. public class MyClient {  
  2.   
  3.     public static void main(String[] args) throws UnknownHostException, IOException {  
  4.         Scanner reader = new Scanner(System.in);  
  5.           
  6.         while (true) {  
  7.             // 创建客户端socket  
  8.             Socket client = new Socket("localhost"9999);  
  9.             System.out.println("---------------------------");  
  10.               
  11.             // 获取客户端的输入流(获取服务器端的输出流)  
  12.             BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));   
  13.             //   
  14.             PrintWriter out = new PrintWriter(client.getOutputStream());   
  15.               
  16.             System.out.println("Input Something ");  
  17.             String msg = reader.nextLine();   
  18.             System.out.println("Client sended " +  msg);  
  19.             out.println(msg);    
  20.             out.flush();    
  21.             if (msg.equals("bye")) {    
  22.                 System.out.println("Client stop!");  
  23.                 break;    
  24.             }    
  25.             System.out.println("Client received " + in.readLine());  
  26.             client.close();  
  27.         }  
  28.     }  
  29.   
  30. }  

 

4、 结果

   首先运行MyServer类,然后MyClient类,然后在MyClient的控制台输入任意字符。

   服务器端

Java代码 复制代码  收藏代码
  1. listening on 9999  
  2. ---------------------------  
  3. the client 127.0.0.1 has connected!  
  4. Server received i am here  
  5. Server send i am here  
  6. ---------------------------  
  7. the client 127.0.0.1 has connected!  
  8. Server received bye  
  9. Server stoped!  

 

   客户端

Java代码 复制代码  收藏代码
  1. ---------------------------  
  2. Input Something   
  3. i am here  
  4. Client sended i am here  
  5. Client received Server received i am here  
  6. ---------------------------  
  7. Input Something   
  8. bye  
  9. Client sended bye  
  10. Client stop!  

 

你可能感兴趣的:(Java Socket之单线程通信)