网络中的进程是通过套接字socket来通信的
下面介绍socket相关的函数:
一、服务器端
(1) socket函数原型:
int socket(int domain, int type, int protocol);
地址族、地址域:domain
常用的协议族有,AF_INET(ipv4)、AF_INET6(ipv6)、
常用的socket类型:type
1.SOCK_STREAM 这个协议是按照顺序的、可靠的、数据完整的基于字节流的连接。这是一个使用最多的socket类型,这个socket是使用TCP来进行传输。
2.SOCK_DGRAM 这个协议是无连接的、固定长度的传输调用。该协议是不可靠的,使用UDP来进行它的连接。
3.SOCK_RAW 这个socket类型提供单一的网络访问,这个socket类型使用ICMP公共协议。
公共协议:protocol
常用的公共协议有,IPPROTO_TCP、IPPTOTO_UDP、IPPROTO_SCTP、IPPROTO_TIPC等,它们分别对应TCP传输协议、UDP传输协议、STCP传输协议、TIPC传输协议。默认为0,即选择IPPROTO_TCP。
返回值:
socket返回的值是一个int型文件描述字,0,1,2分别表示标准输入、标准输出、标准错误。所以其他打开的文件描述符都会大于2, 错误时就返回 -1。
例如: ret = socket(AF_INET,SOCK_STREAM, IPPROTO_TCP;
Printf(“ret=%d\n”, ret);
(2) bind函数原型:
int bind(intsockfd, const struct sockaddr *addr, socklen_t addrlen)
当一个套接字用socket()创建后,存在一个名字空间(地址族),但它没有被命名。bind()将套接字地址(本地主机地址和本地端口地址)与所创建的套接字号联系起来,即将名字赋予套接字,以指定本地半相关。如果没有错误发生,bind()返回0。否则返回SOCKET_ERROR。
sockfd :
是socket描述字,它是通过socket()函数创建了,唯一标识一个socket,故这里写socket()函数的返回值。bind()函数就是将给这个描述字绑定一个名字。
addr:
一个const struct sockaddr*指针,指向要绑定给sockfd(