客户端
#include <WinSock2.h>
#include <stdio.h>
#pragma comment(lib,"ws2_32.lib")
void main()
{
WSAData wsadata;
WSAStartup(MAKEWORD(2,2),&wsadata);
int sock = socket(AF_INET,SOCK_STREAM,0);
printf("%d",sock);
sockaddr_in addr;
addr.sin_addr.S_un.S_addr = inet_addr("192.168.5.202");
addr.sin_family = AF_INET;
addr.sin_port = htons(8892);
int n = connect(sock,(sockaddr *)&addr,sizeof(addr));
printf("%d",n);
if(n == INVALID_SOCKET)
{
printf("error = %d",WSAGetLastError());
}
else
{
while(1)
{
char buffer[256];
int recvived;
//recvived = recv(sock,buffer,256,0);
scanf("%s", buffer);
send(sock, buffer, strlen(buffer) + 1, 0);
if(buffer =="bye")
{
closesocket(sock);
break;
}
}
}
}
服务端:
#include <WinSock2.h>
#include <stdio.h>
#pragma comment(lib,"ws2_32.lib")
DWORD WINAPI ProcessClientRequests(LPVOID lpParam);
void main()
{
WSAData wsadata;
WSAStartup(0x0202,&wsadata);
HANDLE thread[10];
int sock =socket(AF_INET,SOCK_STREAM,0);
//printf("%d",sock);
SOCKADDR_IN addr;
addr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
addr.sin_family = AF_INET;
addr.sin_port = htons(8892);
int n = bind(sock,(sockaddr *)&addr,sizeof(SOCKADDR_IN));
//printf("%d",n);
if(n == SOCKET_ERROR)
{
printf("error = %d",WSAGetLastError());
}
else
{
listen(sock,5);
int thread_num = 0;
while (true)
{
SOCKADDR_IN addrc;
int len = sizeof(SOCKADDR_IN);
SOCKET m_socket = accept(sock, (sockaddr *)&addrc, &len);
if (thread_num < 10)
{
thread[thread_num++] = CreateThread(NULL, 0, ProcessClientRequests, &m_socket, 0, NULL);
}
printf("%d\n",thread_num);
}
}
WaitForMultipleObjects(10, thread, true, INFINITE);
closesocket(sock);
for (int i = 0; i < 10; i++)
{
CloseHandle(thread[i]);
}
WSACleanup();
}
DWORD WINAPI ProcessClientRequests(LPVOID lpParam)
{
SOCKET* clientsocket = (SOCKET*)lpParam; //这里需要强制转换,注意:指针类型的
char* msg = "Hello, my client.rn";
send(*clientsocket, msg, strlen(msg) + sizeof(char), NULL);
while (TRUE)
{
char buffer[MAXBYTE] = { 0 };
recv(*clientsocket, buffer, MAXBYTE, NULL);
if (strcmp(buffer, "exit") == 0)
{
break;
}
}
closesocket(*clientsocket);
return 0;
}
客户端要连接的ip为服务端ip,两端口号要一直才可以。