C语言socket多线程编程限制客户端连接数_第1页
C语言socket多线程编程限制客户端连接数_第2页
C语言socket多线程编程限制客户端连接数_第3页
C语言socket多线程编程限制客户端连接数_第4页
C语言socket多线程编程限制客户端连接数_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

本文格式为Word版,下载可任意编辑——C语言socket多线程编程限制客户端连接数C语言socket多线程编程限制客户端连接数

C语言传递参数均是以值传递passbyvalue,另外也可以传递指针apointerpassedbyvalue。以下是我为大家探寻整理的C语言socket多线程编程限制客户端连接数,梦想能给大家带来扶助!更多精彩内容请实时关注我们我!

先上一些多线程需要使用的函数定义:

代码如下:

DWORDWINAPIProcessClientRequestsLPVOIDlpParam//新线程将会执行的函数定义

return0;

HANDLEhandler=CreateThreadNULL,0,ProcessClientRequests,clientsocket,0,NULL;//这里对比简朴,clientsocket是个指针,是从主线程传入新线程的参数

WaitForMultipleObjectsMAXCLIENTS,threads,TRUE,INFINITE;//用来阻塞主线程,直到全体创造的子线程都完成任务为止,才持续执行后面的代码

forinti=0;i

CloseHandlethreads[i];//创造的'每个子线程的HANDLE都会被保存在HANDLE数组中,这个函数用于关闭各个handle所对应的线程空间

服务器端程序

主线程代码如下:

代码如下:

#defineMAXCLIENTS3//宏定义,最多3个客户端连接

intmain

WSADATAwsaData;

WSAStartupMAKEWORD2,2,wsaData;

HANDLEthreads[MAXCLIENTS];

SOCKETs=socketPF_INET,SOCK_STREAM,IPPROTO_TCP;

sockaddr_insockaddr;

sockaddr.sin_family=PF_INET;

sockaddr.sin_addr.S_un.S_addr=inet_addr127.0.0.1;

sockaddr.sin_port=htons9000;

binds,SOCKADDR*sockaddr,sizeofSOCKADDR;

listens,1;

printflisteningonport[%d].n,9000;

intexistingClientCount=0;

whileTRUE

SOCKADDRclientAddr;

intsize=sizeofSOCKADDR;

SOCKETclientsocket;

clientsocket=accepts,clientAddr,size;

printf***SYS***Newclienttouched.n;

ifexistingClientCount

threads[existingClientCount++]=CreateThreadNULL,0,ProcessClientRequests,clientsocket,0,NULL;//启动新线程,并且将socket传入

else

char*msg=ExceededMaxincomingrequests,willrefusedthisconnect!rn;

sendclientsocket,msg,strlenmsg+sizeofchar,NULL;//发送拒绝连接消息给客户端

printf***SYS***REFUSED.n;

closesocketclientsocket;//释放资源

break;

printfMaximizeclientsoccurredford%.rn,MAXCLIENTS;

WaitForMultipleObjectsMAXCLIENTS,threads,TRUE,INFINITE;//等待全体子线程,直到完成为止

closesockets;

forinti=0;i

CloseHandlethreads[i];//清理线程资源

WSACleanup;

printfClearedall.rn;

getchar;

exit0;

子线程函数定义

代码如下:

DWORDWINAPIProcessClientRequestsLPVOIDlpParam

SOCKET*clientsocket=SOCKET*lpParam;//这里需要强制转换,留神:指针类型的

char*msg=Hello,myclient.rn;

send*clientsocket,msg,strlenmsg+sizeofchar,NULL;

printf***SYS***HELLO.n;

whileTRUE

charbuffer[MAXBYTE]=0;

recv*clientsocket,buffer,MAXBYTE,NULL;

ifstrcmpbuffer,exit==0

char*msg_bye=Bye.rn;

send*clientsocket,msg_bye

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论