vs c语言 多线程demo,一个多线程的Socket通信Demo(C语言实现)
-----------這是客戶端程序--------------
#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;
}
總結
以上是生活随笔為你收集整理的vs c语言 多线程demo,一个多线程的Socket通信Demo(C语言实现)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 中信信用卡团金宝申请被拒是什么原因
- 下一篇: 印度二季度GDP断崖式下跌!主要经济体中