Java Socket编程 标准范例(多线程)

来源:互联网 发布:硕鼠下载器 mac 编辑:程序博客网 时间:2024/05/06 13:24

服务器端(Server)非多线程

[java] view plain copy
  1. package com.zeph.serverclient;  
  2.   
  3. import java.io.BufferedReader;  
  4. import java.io.IOException;  
  5. import java.io.InputStreamReader;  
  6. import java.io.PrintWriter;  
  7. import java.net.ServerSocket;  
  8. import java.net.Socket;  
  9.   
  10. public class MyServer {  
  11.     public static void main(String[] args) throws IOException {  
  12.         ServerSocket server = new ServerSocket(5678);  
  13.         Socket client = server.accept();  
  14.         BufferedReader in = new BufferedReader(new InputStreamReader(  
  15.                 client.getInputStream()));  
  16.         PrintWriter out = new PrintWriter(client.getOutputStream());  
  17.         while (true) {  
  18.             String str = in.readLine();  
  19.             System.out.println(str);  
  20.             out.println("has receive....");  
  21.             out.flush();  
  22.             if (str.equals("end"))  
  23.                 break;  
  24.         }  
  25.         client.close();  
  26.     }  
  27. }  

客户端(Client)

[java] view plain copy
  1. package com.zeph.serverclient;  
  2.   
  3. import java.io.BufferedReader;  
  4. import java.io.InputStreamReader;  
  5. import java.io.PrintWriter;  
  6. import java.net.InetAddress;  
  7. import java.net.Socket;  
  8.   
  9. public class MyClient {  
  10.     static Socket server;  
  11.   
  12.     public static void main(String[] args) throws Exception {  
  13.         server = new Socket(InetAddress.getLocalHost(), 5678);  
  14.         BufferedReader in = new BufferedReader(new InputStreamReader(  
  15.                 server.getInputStream()));  
  16.         PrintWriter out = new PrintWriter(server.getOutputStream());  
  17.         BufferedReader wt = new BufferedReader(new InputStreamReader(System.in));  
  18.         while (true) {  
  19.             String str = wt.readLine();  
  20.             out.println(str);  
  21.             out.flush();  
  22.             if (str.equals("end")) {  
  23.                 break;  
  24.             }  
  25.             System.out.println(in.readLine());  
  26.         }  
  27.         server.close();  
  28.     }  
  29. }  

服务器端(Server)多线程

[java] view plain copy
  1. package com.zeph.multiclient;  
  2.   
  3. import java.io.BufferedReader;  
  4. import java.io.IOException;  
  5. import java.io.InputStreamReader;  
  6. import java.io.PrintWriter;  
  7. import java.net.ServerSocket;  
  8. import java.net.Socket;  
  9.   
  10. public class MultiClient extends Thread {  
  11.     private Socket client;  
  12.   
  13.     public MultiClient(Socket c) {  
  14.         this.client = c;  
  15.     }  
  16.   
  17.     public void run() {  
  18.         try {  
  19.             BufferedReader in = new BufferedReader(new InputStreamReader(  
  20.                     client.getInputStream()));  
  21.             PrintWriter out = new PrintWriter(client.getOutputStream());  
  22.             // Mutil User but can't parallel  
  23.   
  24.             while (true) {  
  25.                 String str = in.readLine();  
  26.                 System.out.println(str);  
  27.                 out.println("has receive....");  
  28.                 out.flush();  
  29.                 if (str.equals("end"))  
  30.                     break;  
  31.             }  
  32.             client.close();  
  33.         } catch (IOException ex) {  
  34.         } finally {  
  35.         }  
  36.     }  
  37.   
  38.     public static void main(String[] args) throws IOException {  
  39.         ServerSocket server = new ServerSocket(5678);  
  40.         while (true) {  
  41.             // transfer location change Single User or Multi User  
  42.   
  43.             MultiClient mc = new MultiClient(server.accept());  
  44.             mc.start();  
  45.         }  
  46.     }  
  47. }  


测试这个代码的时候可以直接用DOS控制台上面运行,这样看的效果更清楚!

服务器基本步骤:

1.指定端口实例化一个SeverSocket

2.调用ServerSocket的accept()方法,以在等待连接期间造成阻塞

3.获取位于该底层的Socket的流以进行读写操作

4.将数据封装成流

5.对Socket进行读写

6.关闭打开的流

客户端基本步骤:

1.通过IP地址和端口实例化Socket,请求连接服务器

2.获得Socket上的流以进行读写

3.把流封装进BufferedReader/PrintWriter的实例

4.对Socket进行读写

5.关闭打开的流

0 0
原创粉丝点击