socket编程:
服务端可以分为:socket()、bind()、listen()、accept() 剩下就可以处理数据
客户端有:socket()、connect()、处理数据
socket(): 创建一个描述符用来唯一标识一个socket。
int socket(int domain, int type, int protocol);
domain:即协议域,又称为协议族(family)。常用的协议族有,AF_INET、AF_INET6、AF_LOCAL(或称AF_UNIX,Unix域socket)、AF_ROUTE等等。协议族决定了socket的地址类型,在通信中必须采用对应的地址,如AF_INET决定了要用ipv4地址(32位的)与端口号(16位的)的组合、AF_UNIX决定了要用一个绝对路径名作为地址。
type:指定socket类型。常用的socket类型有,SOCK_STREAM、SOCK_DGRAM、SOCK_RAW(原始头报文)、 SOCK_PACKET、SOCK_SEQPACKET等等。
protocol:故名思义,就是指定协议。常用的协议有,IPPROTO_TCP、IPPTOTO_UDP、IPPROTO_SCTP、IPPROTO_TIPC等,它们分别对应TCP传输协议、UDP传输协议、STCP传输协议、TIPC传输协议
protocol为0时,会自动选择type类型对应的默认协议 失败是 返回值为-1
当我们调用socket创建一个socket时,返回的socket描述字它存在于协议族(address family,AF_XXX)空间中,但没有一个具体的地址。
如果想要给它赋值一个地址,就必须调用bind()函数,否则就当调用connect()、listen()时系统会自动随机分配一个端口。
eg:int client_socket = socket(AF_INET, SOCK_STREAM, 0);
bind()函数: 函数把一个地址族中的特定地址赋给socket。例如对应AF_INET、AF_INET6就是把一个ipv4或ipv6地址和端口号组合赋给socket。
int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
sockfd:即socket描述字,它是通过socket()函数创建了,唯一标识一个socket。bind()函数就是将给这个描述字绑定一个名字。
addr:一个const struct sockaddr *指针,指向要绑定给sockfd的协议地址。
addrlem:地址长度。
bind()函数的返回值为0时表示绑定成功,-1表示绑定失败,errno的错误值如表1所示。
eg:int ret = bind(listen_socket, (struct sockaddr *)&service_addr, sizeof(service_addr)) //前面已经定义过结构体了struct sockaddr_in service_addr; memset(service_addr, 0, sizeof(service_addr)); //初始化service_addr
listen()、connect()函数: 如果作为一个服务器,在调用socket()、bind()之后就会调用listen()来监听这个socket,如果客户端这时
调用connect()发出连接请求,服务器端就会接收到这个请求。
int listen(int sockfd, int backlog);
int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
listen函数的第一个参数即为要监听的socket描述字,第二个参数为相应socket可以排队的最大连接个数。socket()函数创建的socket默认是一个主动类型的,listen函数将socket变为被动类型的,等待客户的连接请求。若成功则为0,若出错则为-1
connect函数的第一个参数即为客户端的socket描述字,第二参数为服务器的socket地址,第三个参数为socket地址的长度。客户端通过调用
connect函数来建立与TCP服务器的连接。 如果请求连接成功,则返回0,否则返回-1 包含错误码。
eg: #define BACKLOG 5
int ret = listen(listen_socket, BACKLOG)
int listen_socket = connect(client_socket, (struct sockaddr *)&addr, addrlen)
accept()函数: TCP服务器端依次调用socket()、bind()、listen()之后,就会监听指定的socket地址了。TCP客户端依次调用socket()、conne
c语言实现socket编程--客户端与客户端之间通过服务器进行通讯
最新推荐文章于 2026-05-01 05:50:30 发布


774

被折叠的 条评论
为什么被折叠?



