我另外一片博客中详细解析了Linux下tcp socket通信的过程,下面是我对socket机制更深一层的学习。
服务器和客户端创建过程简单描述如下:
服务器端
一、创建服务器套接字(CREATE)。
二、服务器套接字进行信息绑定(BIND),并开始监听连接(LISTEN)。
三、接受来自客户端的连接请求(ACCEPT),并创建接收进程。
四、开始数据传输(SEND、RECEIVE)。
五、关闭套接字(CLOSESOCKET)。
客户机端
一、创建客户机套接字(CREATE)。
二、与远程服务器进行连接(CONNECT),如被接受则创建接收进程。
三、开始数据传输(SEND、RECEIVE)。
四、关闭套接字(CLOSESOCKET)
socket函数
SOCKET socket(int af, int type, int protocol);
af:指定应用程序使用的通信协议的协议族,对于TCP/IP协议族该参数设置为AN_INET,对于UNIX可建立本地Socket
type:指定创建socket类型:
流套接字类型(SOCK_STREAM):最常见的类型,基于TCP协议
数据报套接字类型(SOCK_DGRAM):即UDP数据报
原始套接字类型(SOCK_RAW):在IP层对套接字进行编程
protocol:指定应用程序所使用的通信协议。最常用的是TCP和UDP
流套接字和数据报套接字不能完成的任务,可以在原始套接字中得以实现。
Socket从传输模式上又分为端对端和点对点的连接,流套接字和数据报套接字都属于端对端的连接,因此需要绑定端口号。而原始套接字是基于IP协议的,属于点对点的传输模式,是没有端口这个概念的。比如常用的监测网络连接ping命令,就是基于ICMP协议的,它不存在端口的概念。Socket是一种服务,与其实现的语言无关。基于这个性质,我们能实现不同服务之间,不同语言之间的互联互通。
socket实质上提供了进程通信的端点。进程通信之前,双方首先必须各自创建一个端点,否则是没有办法建立联系并相互通信的。正如打电话之前,双方必须各自拥有一台电话机一样。
更多详细内容:百度socket词条http://baike.baidu.com/link?url=PsoIpr5DfvwlKhwf4hVgxCB7UhzIYkCroynJWdUhWLMo_D9VX39oaRdpEwoaUuu-RSaSvq8gGvSfuY85zKhFOa2-2O3OGm6GpchojKLyA4G