socket通信涉及的基本函数有:
(1)创建套接字
sockfd=socket(domain, type, protocol);参数domain指定socket地址簇类型,type为套接字类型,protocol指明socket请求的协议,sockfd为套接字返回的文件描述符。
例子:
SOCKET PASCAL FAR socket( int af, int type, int protocol);
af:一个地址描述。目前仅支持AF_INET格式,也就是说ARPA Internet地址格式。
type:指定socket类型。新
套接口的类型描述类型,如TCP(SOCK_STREAM)和UDP(SOCK_DGRAM)。常用的socket类型有,SOCK_STREAM、SOCK_DGRAM、SOCK_RAW、SOCK_PACKET、SOCK_SEQPACKET等等。
protocol:顾名思义,就是指定协议。
套接口所用的协议。如调用者不想指定,可用0。常用的协议有,IPPROTO_TCP、IPPROTO_UDP、IPPROTO_SCTP、IPPROTO_TIPC等,它们分别对应TCP传输协议、UDP传输协议、STCP传输协议、TIPC传输协议。
(2)绑定套接字与本地地址信息
bind(sockfd,(struct sockaddr*)& amp;server_addr,sizeof(struct sockaddr));该函数将本地主机地址以及端口号与所创建的套接字绑定起来。
(3)监听连接
listen(sockfd,backlog);此函数表示服务器愿意接收连接,backlog指队列中允许的最大排队请求的个数。
(4)建立连接
connect(sockfd,(struct sockaddr*) &server_addr,sizeof(struct sockaddr));connect用于建立连接,server_addr是保存着服务器IP地址和端口号的数据结构struct sockaddr。
(5)接收连接请求
accept(sockfd,(struct sockaddr*) &client_addr,sizeof(struct sockaddr));用于接收客户机发来的连接请求。
(6)发送数据
send(sockfd, msg, len,flags);将len字节的数据msg发送出去,flags通常为0。
(7)接收数据
recv(sockfd, buf,len,flags);从套接字缓冲区buf中读取len字节长度的数据。
(8)关闭套接字
close(sockfd);用于关闭套接字连接。
socket通信过程
套接字编程采用客户机/服务器(C/S)模式,连接成功后,双方可以进行通信。通信过程如图1所示。