Winsock编程基础2(Winsock编程流程)
2021-07-07 22:06
标签:ipv4 连接数 tchar 地址 while 发送 发送数据 send 填充 Winsock编程基础2(Winsock编程流程) 标签:ipv4 连接数 tchar 地址 while 发送 发送数据 send 填充 原文地址:https://www.cnblogs.com/chenxingyang/p/9747827.html//创建套接字
SOCKET socket(
int af, //指定套接字使用的地址格式,Winsock只支持AF_INET
int type, //套接字类型
int protocol//配合type使用,使用的协议
);
//---type
/*
* SOCKET_STREAM 流套接字,TCP
* SOCKET_DGRAM 数据报套接字UDP
* SOCK_RAW 原始套接字
*/
//type使用上面两种时,protocol可直接赋0
//创建失败返回 INVALID_SOCKET(-1),可通过WSAGetLastError获得错误代码
//也可以使用WSASocket创建套接字,现在先不讨论
//关闭套接字
int closesocket(SOCKET s); //s为要关闭套接字句柄
int bind(
SOCKE s, //套接字句柄
const struct socketaddr* name, //要关联的本地地址
int nameLen //地址长度
);
//bind作用在没有建立连接的套接字上
//绑定示例
//填充sockaddr_in结构
sockaddr_in addr;
addr.sin_family = AF_INET;
addr.sin_port = htons(4567); //为0时主机也会自动配置
addr.sin_addr.S_un.S_addr = INADDR_ANY; //自动使用当前主机配置
//绑定这个套接字到一个本地地址
if(bind(sListen, (LPSOCKADDR)&addr, sizeof(addr)) == SOCKET_ERROR)//sListen是一个套接字
{
cout "Failed bind()" endl;
return 0;
}
int listen(
SOCKET s, //套接字句柄
int backlog //监听队列中允许保持的尚未处理的最大连接数,队满客户端会收到WSAECONNREFUSED
);
SOCKET accept( //返回实际连接的套接字,与s有相同属性
SOCKET s,
struct sockaddr* addr, //指向sockassr_in结构指针,用于获得对方信息
int *addrLen //指向地址长度指针
);
int connect(
SOCKET s, //客户端套接字
const struct sockaddr FAR *name, //包含了要连接的服务器的地址信息
int nameLen
);
int send(
SOCKET s, //
const char FAR *buf, //要发送的数据缓冲区地址
int Len, //缓冲区长度
int flags //调用方式,常设0
);
int recv(SOCKET s, char FAR *buf, int len, int flags)
//服务器端
#include
#include