Sokect简单入门TCP协议一
Posted kuangyefeige
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Sokect简单入门TCP协议一相关的知识,希望对你有一定的参考价值。
通过多线程实现服务器端的多用户访问
一、线程方法
1 import java.io.IOException; 2 import java.io.InputStream; 3 import java.io.ObjectInputStream; 4 import java.io.OutputStream; 5 import java.io.PrintWriter; 6 import java.net.ServerSocket; 7 import java.net.Socket; 8 9 import pb.socket.entity.User; 10 11 /** 12 * 专门的线程类 13 * */ 14 public class ServerThread extends Thread { 15 //和本线程相关的Socket 16 Socket socket=null; 17 18 public ServerThread(Socket socket){ 19 this.socket=socket; 20 } 21 22 //线程启动:响应客户请求 23 public void run(){ 24 try { 25 //3.获得输入流 26 InputStream is=socket.getInputStream(); 27 //获得流:可以对对象进行反序列化 28 ObjectInputStream ois=new ObjectInputStream(is); 29 //获得输出流 30 OutputStream os=socket.getOutputStream(); 31 PrintWriter pw=new PrintWriter(os); 32 //4.读取用户输入信息 33 User user=(User)ois.readObject(); 34 System.out.println("用户信息:"+user.getLoginName()+"---"+user.getPwd()); 35 //给客户一个响应 36 String reply="welcome!"; 37 pw.write(reply); 38 pw.flush(); 39 //5.关闭资源 40 pw.close(); 41 os.close(); 42 ois.close(); 43 is.close(); 44 socket.close(); 45 } catch (IOException e) { 46 // TODO Auto-generated catch block 47 e.printStackTrace(); 48 } catch (ClassNotFoundException e) { 49 // TODO Auto-generated catch block 50 e.printStackTrace(); 51 } 52 } 53 }
二、服务器端代码
/** * 服务器端 * */ public class LoginServer { public static void main(String[] args) { try { //1.建立一个服务器Socket(ServerSocket)绑定指定端口并开始监听 ServerSocket serverSocket=new ServerSocket(8800); //2.使用accept()方法阻塞等待监听,获得新的连接 Socket socket=null; //客户数量 int num=0; //一直处于监听状态 while(true){ socket=serverSocket.accept(); ServerThread serverThread=new ServerThread(socket); serverThread.start(); num++; System.out.println("客户数量为:"+num); //客户的IP信息 InetAddress ia=socket.getInetAddress(); //客户的Ip String ip=ia.getHostAddress(); System.out.println("本客户的IP为:"+ip); //客户的主机名称 String hostname=ia.getHostName(); System.out.println("本客户的主机为:"+hostname); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
三、客户端代码
1 import java.io.BufferedReader; 2 import java.io.IOException; 3 import java.io.InputStream; 4 import java.io.InputStreamReader; 5 import java.io.ObjectOutputStream; 6 import java.io.OutputStream; 7 import java.io.PrintWriter; 8 import java.net.Socket; 9 import java.net.UnknownHostException; 10 11 import pb.socket.entity.User; 12 13 /** 14 * 客户端 15 * */ 16 public class LoginClient { 17 public static void main(String[] args) { 18 try { 19 //1.建立客户端Socket连接,指定服务器的位置以及端口 20 Socket socket=new Socket("localhost",8800); 21 //2.得到Socket的读写流 22 OutputStream os=socket.getOutputStream(); 23 //对象序列化流 24 ObjectOutputStream oos=new ObjectOutputStream(os); 25 //输入流 26 InputStream is=socket.getInputStream(); 27 BufferedReader br=new BufferedReader(new InputStreamReader(is)); 28 //3.利用流按照一定的协议对Socket进行读/写操作 29 User user=new User(); 30 user.setLoginName("kate"); 31 user.setPwd("120056"); 32 oos.writeObject(user); 33 34 socket.shutdownOutput(); 35 //接受服务器的响应并打印显示 36 String reply=null; 37 while(!((reply=br.readLine())==null)){ 38 System.out.println("我是客户端,服务器的响应为:"+reply); 39 } 40 //4.关闭资源 41 br.close(); 42 is.close(); 43 oos.close(); 44 os.close(); 45 socket.close(); 46 } catch (UnknownHostException e) { 47 // TODO Auto-generated catch block 48 e.printStackTrace(); 49 } catch (IOException e) { 50 // TODO Auto-generated catch block 51 e.printStackTrace(); 52 } 53 54 } 55 }
以上是关于Sokect简单入门TCP协议一的主要内容,如果未能解决你的问题,请参考以下文章
HTTP3.0(下一代HTTP)将弃TCP协议改用QUIC 技术