8-UDP客户端

UDP客户端

1.初始化网络库

WORD wVersionRequested;
WSADATA wsadata;
int err;
wVersionRequested = MAKEWORD(2, 2);

err = WSAStartup(wVersionRequested, &wsadata);
if (err)
{
printf("WSAStartup errnum: %d\n", GetLastError());
return err;
}

if (LOBYTE(wsadata.wVersion) != 2 || HIBYTE(wsadata.wVersion) != 2)
{
printf("LOBYTE errnum: %d\n", GetLastError());
WSACleanup();
return -1;
}

2.创建SOCKET

SOCKET sockCli;
sockCli = socket(AF_INET, SOCK_DGRAM, 0);
if (INVALID_SOCKET == sockCli)
{
printf("socket err : %d", GetLastError());
return -1;
}

3.收发数据

int len = sizeof(SOCKADDR_IN);
char sendBuf[100] = "hello";
char recvBuf[100] = { 0 };

sendto(sockCli, sendBuf, sizeof(sendBuf) + 1, 0, (SOCKADDR*)&addrSrv, len);

recvfrom(sockCli, recvBuf, 100, 0, (SOCKADDR*)&addrSrv, &len);

完整代码

#include<iostream>
#include<WinSock2.h>
using namespace std;

#pragma comment(lib,"ws2_32.lib")

int main()
{
cout << "Client" << endl;
WORD wVersionRequested;
WSADATA wsadata;
int err;
wVersionRequested = MAKEWORD(2, 2);

err = WSAStartup(wVersionRequested, &wsadata);
if (err)
{
printf("WSAStartup errnum: %d\n", GetLastError());
return err;
}

if (LOBYTE(wsadata.wVersion) != 2 || HIBYTE(wsadata.wVersion) != 2)
{
printf("LOBYTE errnum: %d\n", GetLastError());
WSACleanup();
return -1;
}

SOCKET sockCli;
sockCli = socket(AF_INET, SOCK_DGRAM, 0);
if (INVALID_SOCKET == sockCli)
{
printf("socket err : %d", GetLastError());
return -1;
}

SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
addrSrv.sin_family = AF_INET;
addrSrv.sin_port = htons(9988);

int len = sizeof(SOCKADDR_IN);
char sendBuf[100] = "hello";
char recvBuf[100] = { 0 };

sendto(sockCli, sendBuf, sizeof(sendBuf) + 1, 0, (SOCKADDR*)&addrSrv, len);

recvfrom(sockCli, recvBuf, 100, 0, (SOCKADDR*)&addrSrv, &len);

cout << recvBuf << endl;
system("pause");

return 0;
}