用Java实现基于Socket的网络编程
前言
这几天做计算机网络和数据库的课设,有一段时间没写博客了。今天写一篇用Java实现的聊天室,是之前做的计算机网络的作业,使用TCP协议,可以进行一对一、一对多的聊天,不过比较简陋,没有用户界面,输入输出都是在控制台。
什么是Socket
既然需要使用到Socket,那么首先得明白Socket是个什么东西。我们先扯远一点说,从计算机网络体系结构开始。
我们都知道大名鼎鼎的OSI七层协议体系并不实用,真正被广泛使用的是TCP/IP的四层协议,而五层协议是OSI和TCP/IP的综合体,只是为方便介绍计算机网络的原理才使用的。不管是几层的协议,在经过一通操作到达运输层时,数据已经可以从源主机传到目的主机了。
但是实际上,真正需要进行通信的是两台主机中的某两个进程。现在虽然已经将数据送到了目标主机,却无法确定需要交付给主机内的哪个进程。就像是信已经寄到小区了,却不知道送到哪一家。这也就是运输层协议要搞定的问题——怎样确定是哪个进程、以怎样的方式来传输(TCP/UDP)。
为了解决第一个问题,在运输层中使用协议端口号来标志本计算机中各个进程同运输层交互时的接口。通俗地说,就是给每个家(进程)分配一个门牌号(端口号)。现在通过端口号就可以找到对应进程了。这说明,当我们需要给某台计算机中的某个进程发送数据时,除了要知道对方的IP地址,还需要知道对方的端口号。
现在再问:什么是Socket?在课本的定义中是:端口号拼接到IP地址即构成了套接字(Socket)。Socket的表示方法就是,在点分十进制的IP地址后面写上端口号,例如(127.0.0.1:8888)。
当然,Socket并不是只有这一个意思。现在我们说“利用Socket实现网络编程”,不是说用(127.0.0.1:8888)这么一串数字就可以了,而是在说使用系统提供的 socket API来进行网络编程。这个so