JAVA Socket编程(二)之TCP通信

白昼怎懂夜的黑 提交于 2019-12-19 22:01:11

基于TCP(面向连接)的socket编程,分为客户端和服务器端。

客户端的流程如下:

(1)创建套接字(socket)

(2)向服务器发出连接请求(connect)

(3)和服务器端进行通信(send/recv)

(4)关闭套接字

服务器端的流程如下:

(1)创建套接字(socket)

(2)将套接字绑定到一个本地地址和端口上(bind)

(3)将套接字设为监听模式,准备接收客户端请求(listen)

(4)等待客户请求到来;当请求到来后,接受连接请求,返回一个新的对应于此次连接的套接字(accept)

(5)用返回的套接字和客户端进行通信(send/recv)

(6)返回,等待另一个客户请求。

(7)关闭套接字。

 

本文介绍一个多线程的TCP编程

1:创建服务器端并实现线程类  代码如下

 

 1 package tcp;
 2 
 3 import java.io.BufferedReader;
 4 import java.io.InputStreamReader;
 5 import java.io.PrintWriter;
 6 import java.net.Socket;
 7 
 8 public class Server implements Runnable {//实现一个线程类
 9 private Socket soc;
10     public Server(Socket soc) {
11     super();
12     this.soc = soc;
13 }
14     private BufferedReader in=null;
15     private BufferedReader input=null;//获得各种流对象
16     PrintWriter out=null;
17     @Override
18     public void run() {
19         // TODO Auto-generated method stub
20         try {
21             in=new BufferedReader(new InputStreamReader(soc.getInputStream()));
22             input=new BufferedReader(new InputStreamReader(System.in));
23             out=new PrintWriter(soc.getOutputStream(),true);//每次都清空输出流
24             String message;
25             while((message=in.readLine())!=null){
26                 System.out.println(message);//读取到的客户端数据
27                 System.out.println("输入回执的数据:");
28                 out.println(input.readLine());//回执数据
29             }
30         } catch (Exception e) {
31             // TODO: handle exception
32             e.printStackTrace();
33         }finally{
34             try {
35                 in.close();
36                 input.close();//关闭各种流对象
37                 out.close();
38             } catch (Exception e2) {
39                 e2.printStackTrace();
40                 // TODO: handle exception
41             }
42         }
43     }
44 
45 }

 

2:创建多线程的启动类   代码如下

 1 package tcp;
 2 
 3 import java.net.ServerSocket;
 4 import java.net.Socket;
 5 
 6 public class ServerStart {
 7 
 8     public static void main(String[] args) {
 9         // TODO Auto-generated method stub
10         try {
11             ServerSocket server=new ServerSocket(9000);//这只9000为服务器段
12             Socket soc=new Socket();
13             while (true) {
14                 soc=server.accept();//监听端口的链接
15                 new Thread(new Server(soc)).start();//只要有链接就启动一个线程
16             }
17         } catch (Exception e) {
18             // TODO: handle exception
19             e.printStackTrace();
20         }
21     }
22 
23 }

3:创建客户端的类  代码如下

 1 package tcp;
 2 
 3 import java.io.BufferedReader;
 4 import java.io.InputStreamReader;
 5 import java.io.PrintWriter;
 6 import java.net.Socket;
 7 
 8 public class Client {
 9     private static Socket soc=null;
10     private static BufferedReader in=null;
11     private static BufferedReader input=null;
12     private static PrintWriter out=null;
13     
14     public static void main(String[] args) {
15         // TODO Auto-generated method stub
16         try {
17             soc=new Socket("127.0.0.1",9000);
18             while(true){
19             in=new BufferedReader(new InputStreamReader(soc.getInputStream()));
20             input=new BufferedReader(new InputStreamReader(System.in));
21             out=new PrintWriter(soc.getOutputStream(),true);
22             System.out.println("输入发送的数据:");
23             String op=input.readLine();
24             out.println(op);
25             if(op.equals("aa")){
26                 break;
27             }
28                 System.out.println(in.readLine());
29             }
30         } catch (Exception e) {
31             // TODO: handle exception
32             e.printStackTrace();
33         }finally{
34             try {
35                 in.close();
36                 input.close();
37                 out.close();
38             } catch (Exception e2) {
39                 // TODO: handle exception
40                 e2.printStackTrace();
41             }
42         }
43     }
44 
45 }

 udp查看:http://www.cnblogs.com/GH0522/p/8119289.html

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!