多线程实现服务器
//线程需要调用的函数void pthread_work(struct argc *argc2)
{
int flag;
struct argc argc1;
argc1.sock_clt = argc2->sock_clt;
argc1.sock_serv = argc2->sock_serv;
printf("%d,%d\n",argc1.sock_clt,argc1.sock_serv);
char buffer[1024];
strcpy(buffer, "this is server! welcome!\n");
//send(sock_client, buffer, 1024, 0);
send(argc1.sock_clt, buffer, 1024, 0);
bzero(buffer,sizeof(buffer));
//flag = recv(sock_client, buffer, 1024, 0);
flag = recv(argc1.sock_clt, buffer, 1024, 0);
if(flag < 0){
perror("recv error!\n");
close(argc1.sock_serv);
return;
}
printf("recv : %s\n",buffer);
while(1){
bzero(buffer,sizeof(buffer));
//flag = recv(sock_client, buffer, 1024, 0);
recv(argc1.sock_clt, buffer, 1024, 0);
if(flag < 0){
perror("recv error!\n");
close(argc1.sock_serv);
return;
}
printf("i have recv buffer\n");
printf("recv : %s\n",buffer);
if(strcmp(buffer,"quit") == 0){
printf("quit!!!\n");
break;
}
}
close(argc1.sock_serv);
pthread_exit(0);
}
//在这个函数中需要把accept后的执行过程开启一个线程来执行void server::startListen()
{
int flag = listen(sock_serv, 5);
if(flag < 0){
perror("listen error!\n");
close(sock_serv);
return;
}
//char buffer[1024];
while(1){
//bzero(buffer,sizeof(buffer));
struct sockaddr_in client_addr;
int size = sizeof(client_addr);
int sock_client = accept(sock_serv, (struct sockaddr*)(&client_addr), (unsigned int*)(&size));
if(sock_client < 0){
perror("accept error!\n");
continue;
}
printf("%d\n",sock_client);
argc arg1;
arg1.sock_serv = sock_serv;
arg1.sock_clt = sock_client;
pthread_t new_thread;
flag = pthread_create(&new_thread,NULL,(void*(*)(void*))(&pthread_work),(void*)(&arg1));
if(flag != 0){
perror("thread creation failed!\n");
continue;
}
}
}
在这里用eclipse配置C++开发,但是当使用多线程函数时,会由于Linux没有提供而无法找到线程函数,所以我们不仅要添加头文件,而且要在编译时候配置工程的属性,找到你所使用C++ Builder中的Setting的G++ Linker添加library,其中library添加pthread,path中添加cryto。这时就可以了。你也可以参考这里:好地方
这次的源码要保留一下了~~~下载地址:这里
原文链接: https://www.cnblogs.com/coder2012/archive/2013/06/11/3131913.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/91877
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!