gpt4 book ai didi

Java--Socket通信(客户端服务端双向)

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 25 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章Java--Socket通信(客户端服务端双向)由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

新建两个工程,一个客户端,一个服务端,先启动服务端再启动客户端 。

两个工程的读写操作线程类基本上完全相同 。

服务端:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
 
public class Server {
 
   public static final int PORT = 8000 ; //监听的端口号  
 
   public static void main(String[] args) { 
     Server server = new Server(); 
     server.init(); 
  
 
   public void init() { 
     ServerSocket serverSocket = null ;
     try
       serverSocket = new ServerSocket(PORT); 
       while ( true ) { 
         Socket client = serverSocket.accept(); 
         //一个客户端连接就开户两个线程处理读写 
         new Thread( new ReadHandlerThread(client)).start(); 
         new Thread( new WriteHandlerThread(client)).start(); 
      
     } catch (Exception e) { 
       e.printStackTrace(); 
     } finally {
       try {
         if (serverSocket != null ){
           serverSocket.close();
         }
       } catch (IOException e) {
         e.printStackTrace();
       }
     }
  
 
/*
  *处理读操作的线程 
  */
class ReadHandlerThread implements Runnable{
   private Socket client;
 
   public ReadHandlerThread(Socket client) {
     this.client = client;
   }
 
   @Override
   public void run() {
     DataInputStream dis = null;
     try{
       while(true){
         //读取客户端数据 
         dis = new DataInputStream(client.getInputStream());
         String reciver = dis.readUTF();
         System.out.println("客户端发过来的内容:" + reciver); 
       }
     }catch(Exception e){
       e.printStackTrace();
     }finally{
       try {
         if(dis != null){
           dis.close();
         }
         if(client != null){
           client = null;
         }
       } catch (IOException e) {
         e.printStackTrace();
       }
     }
   }
}
 
/*
  * 处理写操作的线程
  */
class WriteHandlerThread implements Runnable{
   private Socket client;
 
   public WriteHandlerThread(Socket client) {
     this .client = client;
   }
 
   @Override
   public void run() {
     DataOutputStream dos = null ;
     BufferedReader br = null ;
     try {
       while ( true ){
         //向客户端回复信息 
         dos = new DataOutputStream(client.getOutputStream()); 
         System.out.print( "请输入:\t" ); 
         // 键盘录入 
         br = new BufferedReader( new InputStreamReader(System.in));
         String send = br.readLine(); 
         //发送数据
         dos.writeUTF(send); 
       }
     } catch (Exception e){
       e.printStackTrace();
     } finally {
       try {
         if (dos != null ){
           dos.close();
         }
         if (br != null ){
           br.close();
         }
         if (client != null ){
           client = null ;
         }
       } catch (IOException e) {
         e.printStackTrace();
       }
     }
   }
}

客户端:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
 
public class Client {
 
   public static final String IP = "localhost" ; //服务器地址 
   public static final int PORT = 8000 ; //服务器端口号 
 
   public static void main(String[] args) { 
     handler(); 
   }
 
   private static void handler(){
     try {
       //实例化一个Socket,并指定服务器地址和端口
       Socket client = new Socket(IP, PORT);
       //开启两个线程,一个负责读,一个负责写
       new Thread( new ReadHandlerThread(client)).start();
       new Thread( new WriteHandlerThread(client)).start();
     } catch (Exception e) {
       e.printStackTrace();
     }
   }
 
/*
  *处理读操作的线程 
  */
class ReadHandlerThread implements Runnable{
   private Socket client;
 
   public ReadHandlerThread(Socket client) {
     this.client = client;
   }
 
   @Override
   public void run() {
     DataInputStream dis = null;
     try {
       while(true){
         //读取服务器端数据 
         dis = new DataInputStream(client.getInputStream());
         String receive = dis.readUTF();  
         System.out.println("服务器端返回过来的是: " + receive); 
       }
     } catch (IOException e) {
       e.printStackTrace();
     } finally{
       try {
         if(dis != null){
           dis.close();
         }
         if(client != null){
           client = null;
         }
       } catch (IOException e) {
         e.printStackTrace();
       }
     }
   }
}
 
/*
  * 处理写操作的线程
  */
class WriteHandlerThread implements Runnable{
   private Socket client;
 
   public WriteHandlerThread(Socket client) {
     this .client = client;
   }
 
   @Override
   public void run() {
     DataOutputStream dos = null ;
     BufferedReader br = null ;
     try {
       while ( true ){
         //取得输出流
         dos = new DataOutputStream(client.getOutputStream());
         System.out.print( "请输入: \t" ); 
         //键盘录入
         br = new BufferedReader( new InputStreamReader(System.in));
         String send = br.readLine(); 
         //发送数据
         dos.writeUTF(send); 
       }
     } catch (IOException e) {
       e.printStackTrace();
     } finally {
       try {
         if (dos != null ){
           dos.close();
         }
         if (br != null ){
           br.close();
         }
         if (client != null ){
           client = null ;
         }
       } catch (Exception e){
         e.printStackTrace();
       }
     }
   }
}

 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我.

原文链接:http://blog.csdn.net/zlqqhs/article/details/8757250 。

最后此篇关于Java--Socket通信(客户端服务端双向)的文章就讲到这里了,如果你想了解更多关于Java--Socket通信(客户端服务端双向)的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com