TCP服务端
#define _WINSOCK_DEPRECATED_NO_WARNINGS
#include <WinSock2.h>
#pragma comment(lib,"ws2_32.lib")
#include<windows.h>
#include<stdio.h>
int main()
{
WSADATA data;
if (WSAStartup(
MAKEWORD(2, 2),
&data) != 0
)
{
printf("初始化环境失败\n");
return 0;
}
SOCKET ServerSock = socket(
AF_INET,
SOCK_STREAM,
IPPROTO_TCP
);
if (ServerSock == INVALID_SOCKET)
{
printf("创建套接字失败\n");
return 0;
}
SOCKADDR_IN ServerSockaddr = {};
int socklen = sizeof(sockaddr);
ServerSockaddr.sin_family = AF_INET;
ServerSockaddr.sin_port = htons(1234);
ServerSockaddr.sin_addr.S_un.S_addr =
inet_addr("127.0.0.1");
if (SOCKET_ERROR == bind(
ServerSock,
(SOCKADDR*)&ServerSockaddr,
socklen)
)
{
printf("绑定套接字失败\n");
return 0;
}
printf("正在监听。。。。\n");
listen(
ServerSock,
SOMAXCONN);
SOCKADDR_IN ClinetAddress = {};
SOCKET ClinetSock = NULL;
socklen = sizeof(SOCKADDR_IN);
ClinetSock = accept(
ServerSock,
(SOCKADDR*)&ClinetAddress,
&socklen);
if (ClinetSock == INVALID_SOCKET)
{
printf("等待客户连接失败\n");
return 0;
}
char msg[100] = { "hello clinet" };
printf("数据发送中....\n");
send(
ClinetSock,
msg,
13,
0);
recv(
ClinetSock,
msg,
1024,
0);
printf("接收到客户数据:%s\n",msg);
closesocket(ClinetSock);
closesocket(ServerSock);
WSACleanup();
getchar();
return 0;
}
TCP客户端
#define _WINSOCK_DEPRECATED_NO_WARNINGS
#include <WinSock2.h>
#pragma comment(lib,"ws2_32.lib")
#include<windows.h>
#include<stdio.h>
int main()
{
WSADATA data;
if (WSAStartup(
MAKEWORD(2, 2),
&data) != 0
)
{
printf("初始化环境失败\n");
return 0;
}
SOCKET ClinetSock = socket(
AF_INET,
SOCK_STREAM,
IPPROTO_TCP
);
if (ClinetSock == INVALID_SOCKET)
{
printf("创建套接字失败\n");
return 0;
}
SOCKADDR_IN ServerSockAddr = {};
int socklen = sizeof(sockaddr);
ServerSockAddr.sin_family = AF_INET;
ServerSockAddr.sin_port = htons(1234);
ServerSockAddr.sin_addr.S_un.S_addr =
inet_addr("127.0.0.1");
if (SOCKET_ERROR == connect(
ClinetSock,
(SOCKADDR*)&ServerSockAddr,
sizeof(SOCKADDR)
))
{
printf("连接服务端失败\n");
return 0;
}
printf("等待数据...\n");
char buff[1024] = {};
recv(
ClinetSock,
buff,
1024,
0);
printf("收到来自服务端消息:%s\n", buff);
send(
ClinetSock,
"hello server",
13,
0);
closesocket(ClinetSock);
WSACleanup();
getchar();
return 0;
}
UDP服务器
#include <iostream>
#define _WINSOCK_DEPRECATED_NO_WARNINGS
#include <WinSock2.h>
#pragma comment(lib,"ws2_32.lib")
#include<windows.h>
#include<stdio.h>
typedef struct _THREAD_PARAM
{
SOCKET m_ServerSock;
char* m_buff;
SOCKADDR_IN m_ClientAddress;
int m_AddrLen;
} THREAD_PARAM, * PTHREAD_PARAM1;
DWORD WINAPI WorkerThreadB(LPVOID lpThreadParameter)
{
PTHREAD_PARAM1 ParamPoint = (PTHREAD_PARAM1)lpThreadParameter;
while (true)
{
printf("等待数据......\n");
recvfrom(
ParamPoint->m_ServerSock,
ParamPoint->m_buff,
1024,
0,
(SOCKADDR*)&ParamPoint->m_ClientAddress,
&ParamPoint->m_AddrLen);
printf("来自客户端数据:%s......\n", ParamPoint->m_buff);
}
return 0;
}
int main()
{
PTHREAD_PARAM1 ParamPoint = new THREAD_PARAM{};
WSADATA data;
if (WSAStartup(
MAKEWORD(2, 2),
&data) != 0
)
{
printf("初始化环境失败\n");
return 0;
}
SOCKET ServerSock = socket(
AF_INET,
SOCK_DGRAM,
IPPROTO_UDP
);
if (ServerSock == INVALID_SOCKET)
{
printf("创建套接字失败\n");
return 0;
}
SOCKADDR_IN ServerSockaddr = {};
int socklen = sizeof(sockaddr);
ServerSockaddr.sin_family = AF_INET;
ServerSockaddr.sin_port = htons(1234);
ServerSockaddr.sin_addr.S_un.S_addr =
inet_addr("127.0.0.1");
if (SOCKET_ERROR == bind(
ServerSock,
(SOCKADDR*)&ServerSockaddr,
socklen)
)
{
printf("绑定套接字失败\n");
return 0;
}
char buff[1024] = {};
SOCKADDR_IN ClientAddress = {};
int AddrLen = sizeof(SOCKADDR_IN);
ParamPoint->m_AddrLen = AddrLen;
ParamPoint->m_buff = buff;
ParamPoint->m_ClientAddress = ClientAddress;
ParamPoint->m_ServerSock = ServerSock;
HANDLE hThread2 = CreateThread(NULL, NULL, WorkerThreadB, ParamPoint, NULL, NULL);
printf("正在发送数据......\n");
sendto(
ServerSock,
"hello udp client\n",
18,
0,
(SOCKADDR*)&ClientAddress,
sizeof(SOCKADDR)
);
WaitForSingleObject(hThread2, -1);
closesocket(ServerSock);
WSACleanup();
getchar();
return 0;
}
UDP 客户端
#define _WINSOCK_DEPRECATED_NO_WARNINGS
#include <WinSock2.h>
#pragma comment(lib,"ws2_32.lib")
#include<windows.h>
#include<stdio.h>
int main()
{
WSADATA data;
if (WSAStartup(
MAKEWORD(2, 2),
&data) != 0
)
{
printf("初始化环境失败\n");
return 0;
}
SOCKET ServerSock = socket(
AF_INET,
SOCK_DGRAM,
IPPROTO_UDP
);
if (ServerSock == INVALID_SOCKET)
{
printf("创建套接字失败\n");
return 0;
}
SOCKADDR_IN ServerSockaddr = {};
int socklen = sizeof(sockaddr);
ServerSockaddr.sin_family = AF_INET;
ServerSockaddr.sin_port = htons(1234);
ServerSockaddr.sin_addr.S_un.S_addr =
inet_addr("127.0.0.1");
printf("正在发送数据...\n");
sendto(
ServerSock,
"hello udp server\n",
18,
0,
(SOCKADDR*)&ServerSockaddr,
sizeof(SOCKADDR)
);
char buff[1024] = {};
printf("等待接受数据...\n");
recvfrom(
ServerSock,
buff,
1024,
0,
(SOCKADDR*)&ServerSockaddr,
&socklen);
printf("接受到服务端数据:%s\n", buff);
closesocket(ServerSock);
WSACleanup();
getchar();
return 0;
}
IOCP客户端
#define _WINSOCK_DEPRECATED_NO_WARNINGS
#include <WinSock2.h>
#pragma comment(lib,"ws2_32.lib")
#include<windows.h>
#include<stdio.h>
struct MYOVERLAPPED :
OVERLAPPED
{
public:
WSABUF m_buff ;
SOCKET m_ClinetSock;
SOCKADDR_IN m_ClientAddr;
MYOVERLAPPED(SOCKET sock, SOCKADDR_IN addr)
:OVERLAPPED()
{
m_buff.buf = new char[1024]{};
m_buff.len = 1024;
m_ClinetSock = sock;
m_ClientAddr = addr;
}
~MYOVERLAPPED()
{
delete[]m_buff.buf;
m_buff.buf = NULL;
closesocket(m_ClinetSock);
}
};
DWORD WINAPI WorkThread(LPVOID param)
{
HANDLE hIoCompletionProt = (HANDLE)param;
DWORD dwSize = 0;
DWORD dwCompletionKey = 0;
MYOVERLAPPED* pov = NULL;
BOOL bret = TRUE;
while (TRUE)
{
bret = GetQueuedCompletionStatus(
hIoCompletionProt,
&dwSize,
&dwCompletionKey,
(OVERLAPPED**)&pov,
-1
);
if (bret != FALSE && pov != NULL)
{
if (pov->InternalHigh == 0 || pov->InternalHigh == -1)
{
delete pov;
}
else {
printf("接受到 %s:%d :%s\n",
inet_ntoa(pov->m_ClientAddr.sin_addr),
ntohs(pov->m_ClientAddr.sin_port),
pov->m_buff.buf);
DWORD dwReadSize = 0;
DWORD dwFlags = 0;
WSARecv(
pov->m_ClinetSock,
&pov->m_buff,
1,
&dwReadSize,
&dwFlags,
pov,
NULL
);
}
}
}
return 0;
}
int main()
{
WSADATA data;
if (WSAStartup(
MAKEWORD(2, 2),
&data) != 0
)
{
printf("初始化环境失败\n");
return 0;
}
SOCKET ServerSock = socket(
AF_INET,
SOCK_STREAM,
IPPROTO_TCP
);
if (ServerSock == INVALID_SOCKET)
{
printf("创建套接字失败\n");
return 0;
}
SOCKADDR_IN ServerSockaddr = {};
int socklen = sizeof(sockaddr);
ServerSockaddr.sin_family = AF_INET;
ServerSockaddr.sin_port = htons(1234);
ServerSockaddr.sin_addr.S_un.S_addr =
inet_addr("127.0.0.1");
if (SOCKET_ERROR == bind(
ServerSock,
(SOCKADDR*)&ServerSockaddr,
socklen)
)
{
printf("绑定套接字失败\n");
return 0;
}
printf("正在监听。。。。\n");
listen(
ServerSock,
SOMAXCONN);
SOCKADDR_IN ClinetAddress = {};
SOCKET ClinetSock = NULL;
socklen = sizeof(SOCKADDR_IN);
SYSTEM_INFO info;
HANDLE hIoCompletionProt = NULL;
GetSystemInfo(&info);
hIoCompletionProt =
CreateIoCompletionPort(
INVALID_HANDLE_VALUE,
NULL,
NULL,
info.dwNumberOfProcessors * 2
);
if (hIoCompletionProt == INVALID_HANDLE_VALUE)
{
printf("创建完成端口失败\n");
return 0;
}
for (int i = 0; i < info.dwNumberOfProcessors * 2; i++)
{
CreateThread(
NULL,
NULL,
WorkThread,
hIoCompletionProt,
NULL,
NULL
);
}
while (TRUE)
{
SOCKADDR_IN ClinetAddress = {};
int addrlen = sizeof(SOCKADDR_IN);
SOCKET ClientSock = accept(
ServerSock,
(SOCKADDR*)&ClinetAddress,
&addrlen
);
CreateIoCompletionPort(
(HANDLE)ClientSock,
hIoCompletionProt,
NULL,
NULL
);
DWORD dwReadSize = 0;
DWORD dwFlags = 0;
MYOVERLAPPED* pov =
new MYOVERLAPPED(ClientSock, ClinetAddress);
WSARecv(
ClientSock,
&pov->m_buff,
1,
&dwReadSize,
&dwFlags,
pov,
NULL
);
};
closesocket(ClinetSock);
closesocket(ServerSock);
WSACleanup();
getchar();
return 0;
}
IOCP 客户端
#define _WINSOCK_DEPRECATED_NO_WARNINGS
#include <WinSock2.h>
#pragma comment(lib,"ws2_32.lib")
#include<windows.h>
#include<stdio.h>
int main()
{
WSADATA data;
if (WSAStartup(
MAKEWORD(2, 2),
&data) != 0
)
{
printf("初始化环境失败\n");
return 0;
}
SOCKET ClinetSock = socket(
AF_INET,
SOCK_STREAM,
IPPROTO_TCP
);
if (ClinetSock == INVALID_SOCKET)
{
printf("创建套接字失败\n");
return 0;
}
SOCKADDR_IN ServerSockAddr = {};
int socklen = sizeof(sockaddr);
ServerSockAddr.sin_family = AF_INET;
ServerSockAddr.sin_port = htons(1234);
ServerSockAddr.sin_addr.S_un.S_addr =
inet_addr("192.168.2.119");
if (SOCKET_ERROR == connect(
ClinetSock,
(SOCKADDR*)&ServerSockAddr,
sizeof(SOCKADDR)
))
{
printf("连接服务端失败\n");
return 0;
}
printf("等待数据...\n");
char buff[1024] = {};
while (TRUE)
{
printf("<<: ");
gets_s(buff, 1024);
if (strcmp(buff, "quit") == 0)
{
shutdown(ClinetSock, 0);
break;
}
send(
ClinetSock,
buff,
strlen(buff)+1,
0);
}
closesocket(ClinetSock);
WSACleanup();
getchar();
return 0;
}