一 、 套接字连接过程
①服务器监听: 是服务器套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态!。
②客户端请求: 是指客户端套接字提出连接请求 要连接的目标是服务器端的套接字, 为此 客户端套接字必须首先描述他要连接的套接字即 服务器端套接字的ip和port。
③ 连接确认: 服务器端套接字监听到客户端套接字请求 响应客户端,建立一个新的线程 把服务器端套接字描述发给客户端,连接简历好之后服务器端套接字据需处于监听 状态。
二 、 常用的函数:
① int socket(int domain,int type, int protocol)
domian : 协议域 决定了socket的地址类型 通信中必须采用对应的地址类型
type : 指定socket类型 socket 类型: sock_stream sock_dgram sock_ram sock_packet sock_seqpacket 其中sock_stream 是一种面向连接的socket 针对于面 向连接的tcp服务应用。 数据报式 sock_dgram 是一种无连接的socket 对应无连接的udp服务。
protocol: 指定协议 例 IPPROTO_TCP IPPROTO_UDP IPPROTO_STCP IPPROTO_TIPC 分别对应 tcp传输协议 udp传输协议 stcp 传输协议、tipc传输协议
备注: windowsocket 下的protocol 参数中 不存在 stcp
return : 成功返回新创建的套接字的描述符,,失败就返回invalid_socket ,套接字描述符是一个整数类型的值, 每个进程的进程空间里都有一个套接字描述符 表,,,存放套接字和套接字数据结构对应关系 其中有个字段村存放新创建的套接字描述符,对应字段存放套接字数据结构地址, 因此根据 套接字描述符就可以找到套接字数据结构, 每个进程有属于自己的套接字描述符表,,套接字数据结构是在操作系统的内核缓冲里。
② int bind (SOCKET socket ,const trust cockadd* address, socklen_t address_len);
socket : 是一个套接字描述符》
address : 是一个sockaddr 结构指针 ,该结构中包含了要结合的地址和端口号。
address_len: 确定address 缓冲区 的长度。
return
函数执行成功 返回0 否者为 SOCKET_ERROR
③ int recv(SOCKET socket ,char FAR* buf , int len ,int flags);
socket : 一个标示已连接套接字的描述字
buf : 用于接收数据的缓冲区
len: 缓冲区长度
flag: 指定调用方式 取值: MSG_PEEK 查看当前数据 ,数据将 被复制到缓冲区, 但并不从输入队列中删除,MSG_OOB 处理带外数据。
return
无错误发生 : 返回读入字节数 连接终止 返回0 , 否者 返回SOCKET_ERROR 错误 可调用 WSAGETLASTERROR 获取响应错误代码。