Socket
Published on 2022-10-21 15:23 in 分类: socket with 花海~
分类: socket

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窗口看到
关闭之后就可以再次连接了

posted @   花海~  阅读(167)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示