基于java的socket简单聊天编程
Posted liuan
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于java的socket简单聊天编程相关的知识,希望对你有一定的参考价值。
socket编程:
一:什么是socket:socket是BSD UNIX的通信机制,通常称为“套接字”,其英文原意是“孔”或“插座”。有些顾名思义,socket正如其英文原意一样,像是一个多孔插座,可以提供多个端口的连接服务。为了更加直观的了解socket,可以用插座来比喻socket。如果说socket是一个多孔插座,插座是提供各种电器供电的地方,不同的电器工作时需要的电压和电流也不一样,但各种电器都有各自的一个插口,这个称之为“端口”。电器使用的电可以看做是网络资源或者是各种“流”,电是由电线传输过来的,所以插座需要连接电线,这里电线也就是服务器和客户端连接 “connection”。 其中初始化socket的过程像是买来一个插座的安装过程。
在插座这边的是“客户端”,电线那边提供电的发电厂是“服务器”。客户端和发电厂都各自拥有一个地址,即“IP地址”。其中还有一套传输和用电的规则,比如传输电时需要的电线多少伏才能满足需求,电器用电的技术参数,端口是几个孔的。这个是“协议”。正常情况下我们是不会去管协议的内容是什么,也就是说协议在我们面前是隐藏的。
以下是socket运作过程中所对应的网络中的各层,具体数据的在网络中的各层传输:
二.工作原理:对于服务器来说,服务器先初始化socket,然后端口绑定(bind),再对端口监听(listen),调用accept阻塞,等待客户端连接请求。对于客户端来说,客户端初始化socket,然后申请连接(connection)。客户端申请连接,服务器接受申请并且回复申请许可(这里要涉及TCP三次握手连接),然后发送数据,最后关闭连接,这是一次交互过程。
下图是客户端和服务端之间建立连接和连接断开的流程图:
以下是具体的代码实现:
server端
client端:
对应的测试结果如下:
客户端输入hello,服务端发送hi
由上图可以可以看出服务端收到hello,客户端收到hi,结果正确。
以上是关于基于java的socket简单聊天编程的主要内容,如果未能解决你的问题,请参考以下文章
通过基于java实现的网络聊天程序分析java中网络API和Linux Socket API关系