基于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
欢迎大家一起说出自己的想法。