最近面试的时候面试官问了我好几次关于Socket编程的知识,QAQ。一直没有深入学习过网络编程的内容。今天去图书馆借了一本孙卫琴老师的网络编程的书,这几周下了决心要好好学学。
Socket一般翻译成中文叫套接字,wiki是这么说的,network socket 是通过计算机网络的进程间通信(ipC)的端点。现在大部分的OS都实现了socket interface,也就是我们说的Socket API。Socket API简单来说就是把下层的数据进行一封装,然后上层(应用层)利用API来进行与远程主机连接。是不是有点像Socket原来的意思呢(插座)? Java 中套接字主要有三个类,分别是ServerSocket,Socket和DatagramSocket类,前两个是我今天要说的重点,都是建立在TCP协议的基础上,DatagramSocket是建立在UDP协议的基础上的。而且我们的Socket编程也是基于C/S通信模式的,那我再给大家科普一下这个C/S是什么鬼。
大名客户端-服务器通信模式(client-server),和B/S(browser-server)一起是目前主流的通信模式,C/S结构是酱紫:
C/S大致步骤是酱紫:
客户端接受到服务器端的响应,并根据响应决定是否还要发送请求。我们今天的程序就是基于C/S来编写的,而且是在TCP/IP协议的基础上。
图中已经很清楚的说明了Java中服务器端和客户端的通信方式。实现的程序:客户端访问host为"localhost"(也就是127.0.0.1,已经在hosts文件里面有了),port为8000的服务器,访问成功后向其发送任意字符串,服务器端接受到来自客户端的字符串之后向客户端发送Echo:前缀的字符串,若客户端发送的字符串为bye,则服务器与客户端的 socket关闭。EchoSocket.javaEchoService.java参考的链接:Network socketTCP协议客户端服务器模式
新闻热点
疑难解答