套接字函数创建绑定到特定传输服务提供程序的套接字。
SOCKET WSAAPI socket(
[in] int af,
[in] int type,
[in] int protocol
);
af:地址规范系列:
AF_INET:IPv4,AF_INET6:IPv6
type:新套接字的类型规范
SOCK_STREAM:TCP
SOCK_DGRAM:UDP
protocol:
如果指定值 0,则调用方不希望指定协议,服务提供商将选择要使用的 协议
listen:
侦听函数将套接字置于侦听传入连接的状态
函数原型:
int WSAAPI listen(
[in] SOCKET s,
[in] int backlog
);
参数:
s:表示绑定的未连接的套接字的描述符
backlog:挂起的连接队列的最大长度
返回值:如果未发生错误,侦听将返回0
accept:
连接套接字
sockopt:
设置套接字选项
int setsockopt(
[in] SOCKET s,
[in] int level,
[in] int optname,
[in] const char *optval,
[in] int optlen
);
#include
#include
#pragma comment(lib,"ws2_32.lib")
int main() {
WORD wVersionRequested = MAKEWORD(2, 2);
WSADATA lpWSAData;
//启动Winsock DLL的使用
if (WSAStartup(wVersionRequested, &lpWSAData)) {
std::cout << "WSAStartup Error!" << std::endl;
system("pause");
return 0;
}
if (LOBYTE(wVersionRequested)!=2||HIBYTE(wVersionRequested)!=2)
{
WSACleanup();
std::cout << "wVersion Error!" << std::endl;
}
//创建套接字:
SOCKET socSrv = socket(AF_INET, SOCK_STREAM, 0);
SOCKADDR_IN addSrv;
addSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
addSrv.sin_family = AF_INET;
addSrv.sin_port = htons(8000);
//绑定:
bind(socSrv, (sockaddr*)&addSrv, sizeof(sockaddr));
//监听:
listen(socSrv,5);
SOCKADDR_IN addrClient;
int nLength = sizeof(sockaddr);
while (true) {
//在套接字上尝试传入连接
SOCKET sockConn = accept(socSrv, (sockaddr*)&addrClient, &nLength);
//向客户端发送消息:
send(sockConn, "已登录至服务器", strlen("已登录至服务器") + 1, 0);
char recvBuffer[MAX_PATH]{ 0 };
recv(sockConn, recvBuffer, MAX_PATH, 0);
std::cout << "客户端消息:" << recvBuffer << std::endl;
}
closesocket(socSrv);
WSACleanup();
system("pause");
return 0;
}
#include
#include
#pragma comment(lib,"ws2_32.lib")
int main() {
//初始化Winsock DLL的使用
WORD wVersionRequested = MAKEWORD(2, 2);
WSAData lpWSAData;
if (WSAStartup(wVersionRequested, &lpWSAData)) {
printf("WSAStartup Error!\r\n");
system("pause");
return 0;
}
if (LOBYTE(wVersionRequested) != 2 || LOBYTE(wVersionRequested) != 2) {
printf("wVersion Error!\r\n");
system("pause");
return 0;
}
//创建套接字:
SOCKET SocClient = socket(AF_INET, SOCK_STREAM, 0);
SOCKADDR_IN addSrv;
addSrv.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
addSrv.sin_family = AF_INET;
addSrv.sin_port = htons(8000);
//连接
connect(SocClient, (sockaddr*)&addSrv, sizeof(sockaddr));
char recvBuffer[MAX_PATH]{ 0 };
recv(SocClient, recvBuffer, MAX_PATH, 0);
printf("服务器端消息:%s\r\n", recvBuffer);
send(SocClient, "Hello Server", strlen("Hello Server") + 1, 0);
closesocket(SocClient);
WSACleanup();
system("pause");
return 0;
}