“一切皆 Socket!”
话虽些许夸张,但是事实也是,现在的网络编程几乎都是用的 socket。
——有感于实际编程和开源项目研究。
我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览器浏览网页时,浏览
器的进程怎么与 web 服务器通信的?当你用 QQ 聊天时,QQ 进程怎么与服务器或你好友所在的 QQ
进程通信?这些都得靠 socket?那什么是 socket?socket 的类型有哪些?还有 socket 的基本函数,
这些都是本文想介绍的。本文的主要内容如下:
1、网络中进程之间如何通信?
2、Socket 是什么?
3、socket 的基本操作
3.1、socket()函数
3.2、bind()函数
3.3、listen()、connect()函数
3.4、accept()函数
3.5、read()、write()函数等
3.6、close()函数
4、socket 中 TCP 的三次握手建立连接详解
5、socket 中 TCP 的四次握手释放连接详解
6、一个例子(实践一下)
7、留下一个问题,欢迎大家回帖回答!!!
1、网络中进程之间如何通信?
本地的进程间通信(IPC)有很多种方式,但可以总结为下面 4 类:
消息传递(管道、FIFO、消息队列)
同步(互斥量、条件变量、读写锁、文件和写记录锁、信号量)
共享内存(匿名的和具名的)
远程过程调用(Solaris 门和 Sun RPC)
但这些都不是本文的主题!我们要讨论的是网络中进程之间如何通信?首要解决的问题是如何唯一
标识一个进程,否则通信无从谈起!在本地可以通过进程 PID 来唯一标识一个进程,但是在网络中
这是行不通的。其实 TCP/IP 协议族已经帮我们解决了这个问题,网络层的“ip 地址”可以唯一标识网
络中的主机,而传输层的“协议+端口”可以唯一标识主机中的应用程序(进程)。这样利用三元组
(ip 地址,协议,端口)就可以标识网络的进程了,网络中的进程通信就可以利用这个标志与其它
进程进行交互。
使用 TCP/IP 协议的应用程序通常采用应用编程接口:UNIX- BSD 的套接字(socket)和 UNIX
System V 的 TLI(已经被淘汰),来实现网络进程之间的通信。就目前而言,几乎所有的应用程序
都是采用 socket,而现在又是网络时代,网络中进程通信是无处不在,这就是我为什么说“一切皆
socket”。
2、什么是 Socket?