提供的代码不能通过编译,好象缺少文件?
简单写了个示例参考,暂时不考虑线程同步的问题。
修改一下应该可以扩展到监听多个端口,无需写多个S端。
/* server.c */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <winsock2.h> // winsock2.h 要放到 windows.h 的上面
#include <windows.h>
//#pragma comment(lib,"ws2_32.lib")
#define BUFFER_SIZE 256
DWORD WINAPI ThreadProc(SOCKET hSockClient)
{
char buf[BUFFER_SIZE];
int ret;
while (1)
{
ret = recv(hSockClient, buf, BUFFER_SIZE, 0);
if (ret > 0)
{
if (strcmp(buf, "bye") == 0)
break;
printf("%s\n", buf);
send(hSockClient, buf, strlen(buf)+1, 0);
}
Sleep(1000);
}
closesocket(hSockClient);
return 0;
}
int main(void)
{
WSADATA wsadata;
if (WSAStartup(MAKEWORD(2,2),&wsadata) != 0)
{
printf("WSA初始化失败\n");
return -1;
}
SOCKADDR_IN sin;
sin.sin_family = AF_INET;
sin.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
sin.sin_port = htons(8888);
SOCKET hSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
bind(hSocket, (LPSOCKADDR)&sin, sizeof(sin));
listen(hSocket, 5);
SOCKADDR_IN sinClient;
int len = sizeof(sinClient);
SOCKET hSockClient;
HANDLE hThread;
while (1)
{
hSockClient = accept(hSocket, (LPSOCKADDR)&sinClient, &len);
if(hSockClient == INVALID_SOCKET)
{
printf("Accept Failed!\n");
continue;
}
hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ThreadProc, (LPVOID)hSockClient, 0, 0);
if (hThread != NULL)
CloseHandle(hThread);
Sleep(1000);
}
closesocket(hSocket);
WSACleanup();
system("pause");
return 0;
}
/* client.c */
#include <stdio.h>
#include <string.h>
#include <winsock2.h> // winsock2.h 要放到 windows.h 的上面
#include <windows.h>
//#pragma comment(lib,"ws2_32.lib")
#define BUFFER_SIZE 256
int main(void)
{
WSADATA wsadata;
if(WSAStartup(MAKEWORD(2,2),&wsadata) != 0)
{
printf("WSA初始化失败\n");
return -1;
}
SOCKADDR_IN sin;
sin.sin_family = AF_INET;
sin.sin_port = htons(8888);
sin.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
SOCKET hSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (hSocket == INVALID_SOCKET)
{
printf("socket创建失败\n");
WSACleanup();
return -1;
}
if (connect(hSocket,(LPSOCKADDR)&sin,sizeof(sin)) == SOCKET_ERROR)
{
printf("socket客户端连接失败\n");
closesocket(hSocket);
WSACleanup();
return -1;
}
char buf[BUFFER_SIZE];
int ret;
while (1)
{
printf("我:");
scanf("%s", buf);
ret = send(hSocket, buf, strlen(buf)+1, 0);
if (strcmp(buf,"bye") == 0)
break;
ret = recv(hSocket, buf, BUFFER_SIZE, 0);
if (ret > 0)
printf("服务器:%s\n", buf);
}
closesocket(hSocket);
WSACleanup();
system("pause");
return 0;
}