最近面试的时候面试官问了我好几次关于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协议客户端服务器模式
新闻热点
疑难解答