-----------这是客户端程序--------------
#include "stdio.h"
#include "winsock2.h"
#include "stdlib.h"
#pragma comment(lib,"ws2_32")
void main()
{
WSADATA wsaData;
WSAStartup(MAKEWORD(2,2),&wsaData);
SOCKET s = socket(PF_INET,SOCK_STREAM,IPPROTO_TCP);
sockaddr_in sockaddr;
sockaddr.sin_family = PF_INET;
sockaddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
sockaddr.sin_port = htons(9000);
connect(s,(SOCKADDR*)&sockaddr,sizeof(SOCKADDR));
char buffer[MAXBYTE] = {0};
recv(s,buffer,MAXBYTE,NULL);
printf(" ***SERVER*** %s",buffer);
while(TRUE)
{
char* mymsg = new char[10000];
printf(" OK Now You Can Connect .\n ->");
gets(mymsg);
send(s,mymsg,strlen(mymsg)+sizeof(char),NULL);
}
closesocket(s);
WSACleanup();
getchar();
exit(0);
}
-----这是服务端程序------#include "stdio.h"
#include "winsock2.h"
#include "stdlib.h"
#define MAXCLIENTS 2
#pragma comment(lib,"ws2_32")
/*
多线程
SOCKET
*/
DWORD WINAPI ProcessClientRequest(LPVOID lpParam)
{
SOCKET* clientsocket = (SOCKET*)lpParam;
char* msg = "Hello, Welcome to connect . \r\n";
send(*clientsocket,msg,strlen(msg)+sizeof(char),NULL);
printf("---SYS---- Hello @_@\n");
while(TRUE)
{
char buffer[MAXBYTE] = {0};
recv(*clientsocket,buffer,MAXBYTE,NULL);
if(strcmp(buffer,"exit")==0)
{
char* exit_msg = "Bye \r\n";
send(*clientsocket,exit_msg,strlen(exit_msg)+sizeof(char),NULL);
break;
}
printf("--- Sys: %s--\n",buffer);
}
closesocket(*clientsocket);
return 0;
}
int main()
{
WSADATA wsaData;
WSAStartup(MAKEWORD(2,2),&wsaData);
SOCKET s = socket(PF_INET,SOCK_STREAM,IPPROTO_TCP);
sockaddr_in sockaddr;
sockaddr.sin_family = PF_INET;
sockaddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
sockaddr.sin_port = htons(9000);
bind(s,(SOCKADDR*)&sockaddr,sizeof(SOCKADDR));
listen(s,1);
printf("listening on port[%d].\n",9000);
char* msg = new char[1000];
HANDLE threads[MAXCLIENTS]; //线程存放 数组
int CountClient = 0;
while(TRUE)
{
SOCKADDR clientAddr;
int size = sizeof(SOCKADDR);
SOCKET clientsocket;
clientsocket = accept(s,&clientAddr,&size); //阻塞模式 直到有新的Tcp 接入
printf("Sys: New client touched ID is %d .\n",CountClient+1); //
if(CountClient
{
threads[CountClient ++] = CreateThread(NULL,0,&ProcessClientRequest,&clientsocket,0,NULL);
}
else //线程数超了 拒绝服务
{
char *msg = " Error Too many client Connecttion !.\r\n";
send(clientsocket,msg,strlen(msg)+sizeof(char),NULL);
printf(" ** SYS ** REFUSED !.\n");
closesocket(clientsocket);
}
}
printf("Maximize clients occurred for d%.\r\n", MAXCLIENTS);
WaitForMultipleObjects(MAXCLIENTS,threads,TRUE,INFINITE);
closesocket(s); //关闭socket
for(int i=0;i
{
CloseHandle(threads[i]);
}
WSACleanup();
getchar();
exit(0);
return 0;
}