Windows下Socket编程

构架

  • 服务器构架
  1. 加载库资源–WSAStartup
  2. 创建socket–socket
  3. 绑定地址信息–bind
  4. 监听–listen
  5. 获取监听队列第一个连接处理–accept
  6. 发送数据–send
  7. 接收数据–recv
  8. 关闭sock–socketclose
  9. 卸载库–WSACleanup
  • 客户端构架
  1. 加载库资源–WSAStartup
  2. 创建socket–socket
  3. 连接服务器–connect
  4. 发送数据–send(tcp)/sendto(udp)
  5. 接收数据–recv(tcp)/recvfrom(udp)
  6. 关闭sock–socketclose
  7. 卸载库–WSACleanup

创建socket

//第一个参数IPV4,SOCK类型,TCP协议
//错误返回:INVALID_SOCKET ---错误返回不是SOCKET_ERROR
socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);

绑定bind

存储转换函数


网络字节序大端序,计算机字节序小端序
h–主机 n–网络 s–端口 l–IP p–字符串IP

  • 大端序端口 = htons (小端序端口);
  • 大端序IP = htonl(小端序IP);
  • 小端序端口 = ntohs(大端序端口);
  • 小端序IP= ntohl(大端序IP);
  • 字符串IP = inet_ntop(大端序IP);
  • 大端序IP = inet_pton(字符串IP);

//第一个参数IPV4,SOCK类型,TCP协议
sockaddr_in //赋值
//套接字,IP和端口信息,大小
bind(SOCKET s,const struct sockaddr *name,int namelen);
//SOCKET_ERROR错误

监听listen

//sock 为需要进入监听状态的套接字,backlog 为请求队列的最大长度(监听最大量)。
int listen(SOCKET s,int backlog);
//SOCKET_ERROR错误

接收accept

SOCKET accept(SOCKET s,struct sockaddr *addr,int *addrlen);
//INVALID_SOCKET 错误

发送send(tcp)/sendto(udp)

int send(SOCKET s,const char *buf, int len, int flags);
//返回发送字节数  
//SOCKET_ERROR  错误

接收recv(tcp)/recvfrom(udp)

int recv(SOCKET s,const char *buf, int len, int flags);
//返回接收字节数  
//SOCKET_ERROR  错误

连接connect

//第一个参数IPV4,SOCK类型,TCP协议
//错误返回:INVALID_SOCKET
sockaddr_in //赋值
//套接字,IP和端口信息,大小
int connect(SOCKET s,const struct sockaddr *name,int namelen);
//SOCKET_ERROR错误

版权声明:本文为qq_43473072原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。