Java Socket 编程学习笔记(一)

9/6/2015来源:Java教程人气:2305

java Socket 编程学习笔记(一)

最近面试的时候面试官问了我好几次关于Socket编程的知识,QAQ。一直没有深入学习过网络编程的内容。今天去图书馆借了一本孙卫琴老师的网络编程的书,这几周下了决心要好好学学。

Socket是什么

Socket一般翻译成中文叫套接字wiki是这么说的,network socket 是通过计算机网络的进程间通信(ipC)的端点。现在大部分的OS都实现了socket interface,也就是我们说的Socket APISocket API简单来说就是把下层的数据进行一封装,然后上层(应用层)利用API来进行与远程主机连接。是不是有点像Socket原来的意思呢(插座)? Java 中套接字主要有三个类,分别是ServerSocketSocketDatagramSocket类,前两个是我今天要说的重点,都是建立在TCP协议的基础上,DatagramSocket是建立在UDP协议的基础上的。而且我们的Socket编程也是基于C/S通信模式的,那我再给大家科普一下这个C/S是什么鬼。

C/S通信模式是什么

大名客户端-服务器通信模式(client-server),和B/S(browser-server)一起是目前主流的通信模式,C/S结构是酱紫:C/S大致步骤是酱紫:

  1. 客户端向服务器发送请求,告诉服务器"我想干什么"。
  2. 服务器端接受到了客户端的请求,对请求进行分析,知道了客户端"想干什么",然后做出相应的操作来处理客户端的请求。
  3. 服务器端完成了操作之后,会向客户端发送一个响应,告诉客户端"劳资已经麻利的干完事了,还要干嘛",等待客户端的之后的请求。
  4. 客户端接受到服务器端的响应,并根据响应决定是否还要发送请求。我们今天的程序就是基于C/S来编写的,而且是在TCP/IP协议的基础上。

    服务器和客户端的socket通信过程

    图中已经很清楚的说明了Java中服务器端和客户端的通信方式。实现的程序:客户端访问host为"localhost"(也就是127.0.0.1,已经在hosts文件里面有了),port为8000的服务器,访问成功后向其发送任意字符串,服务器端接受到来自客户端的字符串之后向客户端发送Echo:前缀的字符串,若客户端发送的字符串为bye,则服务器与客户端的 socket关闭。EchoSocket.javaEchoService.java参考的链接:Network socketTCP协议客户端服务器模式