基于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
来源:https://www.cnblogs.com/GH0522/p/8119533.html