Socket
一、socket简介:
socket本质是编程接口(API),对TCP/IP的封装,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口;HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通信的能力。在Internet上的主机一般运行了多个服务软件,同时提供几种服务。每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务。(主要了解TCP)
二、TCP简介:
传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793 [1] 定义。
TCP主要是客户端(client)服务端(server)它俩通信之间要经过三次握手
三、例如下服务端和客户端代码
1.服务端
注意:服务端和客户端不能同时读,能同时写在读取,不然容易造成堵塞现象,一般就是服务端先写后读,客户端先读后写
//定义接口9999 ServerSocket serverSocket = new ServerSocket(9999); while(true) { //accept方法等待等待客户端连接 Socket client = serverSocket.accept(); //显示已连接 System.out.println("客户端已连接"); //向客户端发信息,读客户端信息 //in就是客户端写过来的数据 InputStream in = client.getInputStream(); //out就是向客户端发的信息 OutputStream out = client.getOutputStream(); //转换以下以为是字节,getBytes方法 out.write("DDD,hello HHHClient".getBytes()); //输出玩一定要刷新 out.flush(); //定义数组接受读取客户端发来的信息 byte[] bytes=new byte[1024]; //count代表从bytes里面读取到多少个字节,返回的bytes里面的实际长度 int count = in.read(bytes); //字节类型的输出 System.out.println(new String(bytes)); System.out.println(count); //服务端是先写后读 //两个一起读就会造成堵塞,一起写的话就可以 //关闭 client.close(); client=null; }
2.客户端
//ip和接口,就是拿的server,和server通信 Socket server = new Socket("127.0.0.1",9999); //服务端写过来的数据放到in,从in里面读 InputStream in = server.getInputStream(); //客户端给服务端写数据放到out OutputStream out = server.getOutputStream(); //定义数组接受读取服务端发来的信息 byte[] bytes=new byte[1024]; //count代表从bytes里面读取到多少个字节,返回的bytes里面的实际长度 int count = in.read(bytes); //字节类型的输出 System.out.println(new String(bytes)); System.out.println(count); //out向服务端写数据 out.write("HHH,hello DDDServer".getBytes()); //输出玩一定要刷新 out.flush(); //客户端是先读后写
3.注意如果没有关闭连接就会报异常
Exception in thread "main" java.net.BindException: Address already in use: JVM_Bind
可以在cmd窗口看到

关闭之后就可以再次连接了
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?