socket 是什么
socket是套接字,那么什么是套接字呢?简单来说就是服务端的主机和端口号加上客户端的主机加上端口号加上通信协议等信息,我们可以看到下图
import java.net.ServerSocket;
/**
* @author zjl
* @date 2022/10/9 10:04
*/
public class SocketServerTest
{
public static void main(String[] args)
{
try {
//创建服务器的监听socket,
ServerSocket serverSocket = new ServerSocket(12345);
//这主要是为了阻塞程序,不让程序中断
System.in.read();
} catch (Exception e) {
e.printStackTrace();
}
}
}
使用nc在linux上连接:nc 127.0.0.1 12345,可以看到已经客户端nc已经和端口12345的服务端建立连接了
解释一下:网络模式我们可以分为七层,后面改成了五层,应用层(应用层、表示层、会话层现在合并成了一层),传输层、网络层、数据链路层、物理层。程序员我们只需要关系应用层,其他的不需要关心。内核会帮我们计算机双方给连接起来。此时我们是可以发送数据。那么我们是不是有疑问,每次socket是从哪里读取的数据呢?很多人都知道是从网卡,那么这个是有点泛泛,那么到底是从哪里呢?
socket数据是从哪里读取出来的
我们在nc 上发送数据xxx
我们再次使用命令 netstat -anp 发送服务端的接收队列存在数据
为啥是4呢?我们明明发送三个字符的,其实这里面还有一个换行符。所以我们看到数据其实发送到接收队列里面去了,所以socket去读取数据的时候也是去接收队列去读取的。那么我们又有一个疑问,那么其他客户端是怎样读取数据的呢?那么这个又验证了什么是socket了,因为一个套接字:服务端端口号和服务端ip加上客户端的ip和客户端的端口以及发送队列和接受对列组成的,但是每个sokcet保证(服务端ip和端口加客户端的ip和端口号)是唯一的。这样读取和接收的都是自己的数据
ServerSocket对象
import java.net.ServerSo