每当想写文章就想百度一下,百度之后发现socket比预想的要复杂。
socket定义:中文名套接字,网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket;简单滴说socket就是两个端点之间的通信。socket是编程接口(API),对TCP/IP的封装,不是协议。
连接过程可以分为三个步骤:服务器监听,客户端请求,连接确认;服务器监听就是实时监控网络状态;客户端请求是指由客户端的套接字提出连接请求;连接确认:服务器端接收到客户端套接字的连接请求,它就响应客户端套接字的请求,建立一个新的线程,把服务器端描述发给客户端,在客户端确认了此描述,连接就建立就确认好了。socket的类型:1、流套接字(SOCK_STREAM):流套接字用于提供面向连接、可靠的数据传输服务,应用与http;2、数据报套接字(SOCK_DGRAM):数据报套接字提供了一种无连接的服务,应用于UDP;原始套接字(SOCK_RAW)提供给数据链路层使用,不保证数,应用于UDP。据包的顺序。
socket编程一般编程语言都可以如Java、python,socket常用函数:socket()函数,包括domain:协议域,又称协议族(family)、type:指定Socket类型、protocol:指定协议三个参数;bind()函数包括addrlen:对应的是地址的长度、sockfd:socket描述字、addr:是一个结构指针;listen()、connect()、accept()、close()、read()、write()等函数。
三次挥手用到的soceket函数如下:Client发出请求是调用connect()函数发送给服务器端,当服务器端收到请求后调用accept()函数返回给Client;Client确认后在返回给服务器端,这样链接就建立;四次挥手;用户端发出请求是调用close()函数给服务端,服务端返回准备关闭请求调用close();客户端确认关闭调用close()函数发送请求给服务器,服务器确认关闭(这里调用的是不是close()函数?)。根据上述可以看出通信是一系列socket方法的调用。
对于socke的理解还处于朦胧状态,TCP的三次握手建立连接和四次握手释放连接是socket在起作用,原来是通过socket函数实现的越是接触底层感觉难度越大,这样说来只要是TCP/IP协议那么就有编程soeket;tsocket编程只能是细嚼慢咽了,感觉事情越来越复杂了...