socket 编程学习笔记

来源:互联网 发布:网络计划图计算 编辑:程序博客网 时间:2024/05/16 15:00



一 、 套接字连接过程

①服务器监听:  是服务器套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态!。

  ②客户端请求:  是指客户端套接字提出连接请求 要连接的目标是服务器端的套接字, 为此 客户端套接字必须首先描述他要连接的套接字即 服务器端套接字的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 获取响应错误代码。


0 0
原创粉丝点击