Server Develop (二) 多线程实现C/S

简介:
复制代码
//线程需要调用的函数
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。这时就可以了。你也可以参考这里:好地方


本文转自cococo点点博客园博客,原文链接:http://www.cnblogs.com/coder2012/archive/2013/06/11/3131913.html,如需转载请自行联系原作者

相关文章
|
2月前
swing编写client端及多线程server端之server端
swing编写client端及多线程server端之server端
|
2月前
|
XML Linux 数据格式
swing编写client端及多线程server端之client端
swing编写client端及多线程server端之client端
|
SQL 新零售 监控
双十一数据库也疯狂,SQL Server 无法生成 FRunCM 线程,求解
双十一抢购才开始,数据库就出问题了! 一身冷汗,注意不是哪个电商的数据库出问题了,是一个客户公司的数据库出问题了!客户公司是一个原材料生成企业,工厂昼夜不停的生产,核心表数据已有千万之多!可是双十一和它根本就没有任何关系,凌晨两点多数据库就挂了,导致工厂车间所有无法生产!   (一) 问题...
924 0
|
SQL
SQL Server 2005 查询处理器未能为执行并行查询启动必要的线程资源。
今天早上程序突然报:Microsoft OLE DB Provider for SQL Server 错误 '80040e14' 查询处理器未能为执行并行查询启动必要的线程资源。 赶快重启了sql服务,恢复正常,不知道什么原因,打算本周安装sql server 2005 sp3.
1294 0
|
16天前
|
存储 Java 数据库连接
java多线程之线程通信
java多线程之线程通信
|
28天前
|
存储 缓存 NoSQL
Redis单线程已经很快了6.0引入多线程
Redis单线程已经很快了6.0引入多线程
31 3