C语言基础网络编程求助 如何实现多线程

代码如下
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h>
#include <netdb.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <pthread.h>

void*thread(void*);
int client[5],i;

main()
{
int serverSocket= socket(AF_INET,SOCK_STREAM,0);
struct sockaddr_in server_addr;
struct sockaddr_in clientAddr;
int addr_len = sizeof(clientAddr);
//线程
pthread_t id;
pthread_attr_t attr;
pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_DETACHED);
//创建地址
bzero(&server_addr,sizeof(server_addr));
server_addr.sin_family =AF_INET;
server_addr.sin_port = htons(5555);
server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
//绑定
bind(serverSocket,(struct sockaddr *)&server_addr,sizeof(server_addr));
listen(serverSocket,5);
for(i=0;i<5;i++)
{
client[i] = accept(serverSocket,(sockaddr *)&clientAddr,(socklen_t*)&addr_len);
pthread_create(&id,&attr,thread,NULL);
pthread_join(id,NULL);
}
return 0;
}
void*thread(void*)
{
char buffer[200];
int a=i;
while(1)
{
if(recv(client[a],buffer,sizeof(buffer),0)>=0)
printf("客户端发过来的 : %s\n",buffer);
}
}
怎么弄才能让每个客户端发的信息,服务器都就能马上收到额。。。
我这个改来改去还是不行。。。。

第1个回答  2011-04-01
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h>
#include <netdb.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <pthread.h>

void*thread(void*);
int client[5],i;

main()
{
int serverSocket= socket(AF_INET,SOCK_STREAM,0);
struct sockaddr_in server_addr;
struct sockaddr_in clientAddr;
int addr_len = sizeof(clientAddr);
//线程
pthread_t id;
pthread_attr_t attr;
pthread_attr_init(&attr);////////////////////////////////////////////////
pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_DETACHED);
//创建地址
bzero(&server_addr,sizeof(server_addr));
server_addr.sin_family =AF_INET;
server_addr.sin_port = htons(5555);
server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
//绑定
bind(serverSocket,(struct sockaddr *)&server_addr,sizeof(server_addr));
listen(serverSocket,5);
for(i=0;i<5;i++)
{
client[i] = accept(serverSocket,(struct sockaddr *)&clientAddr,(socklen_t*)&addr_len);
pthread_create(&id,&attr,thread,(void *)&client[i]);/////////////////////////////////
pthread_join(id,NULL);
}
close(serverSocket);/////////////////////////
return 0;
}
void* thread(void* argv)
{
char buffer[200];
int a=i;
int s_c = *((int*)argv);///////////////////
while(1)
{
int n = recv(s_c,buffer,sizeof(buffer),0);
if(n > 0)
printf("客户端发过来的 : %s\n",buffer);
else
return;
}
close(s_c);
}追问

大哥 VIOD函数你还return?

第2个回答  2011-04-01
使用fork创建父子进程和socketpair进行监控即可追问

select
多线程
两种方式我弄上了 fork貌似就一个函数就OK了?额...

本回答被提问者采纳

C语言基础网络编程求助 如何实现多线程
close(s_c);}

用C语言如何实现多线程同时运行的情况下,各个线程输出不同的随机数...
1、使用pthread库执行多线程,这个是Linux下的线程库 Windows下应该有自己的API,不过这种东西一般还是以Linux为标准。pthread_create()创建一个线程,传入fun()的函数指针就行了。然后这个Beep()的需求要进行线程间通信,可以用共享内存的方法,设一个bool变量flag共享,然后beep的时候设为false,beep完设成true。fun()里...

C语言 阻塞,非阻塞和多线程有什么关系
阻塞是在传统的网络编程中我们依赖于ServerSocket,Socket进行通信,大致的框架就是ServerSocket调用accept方法,等待客户端的连接,如果连接进来的时候则创建一个服务器端socket,客户端和服务器端socket建立好InputStream 和outputStream通道进行通信,在这个网络IO的过程中inputStream的read 和outputStream的write...

学习网络编程需要具备什么知识基础
学习网络编程需要具备计算机基础知识,以及一些英语基础,看题主描述是学习过C语言,所以算是有一定基础的,所以如果想要学习网络编程还是比较容易的。现在用的比较多的是java,而且java的应用范围也比较广,即使后面不从事网络编程,想要做其他编程类的工作也是比较容易的,所以选择学java可能是个不错的选择。

已经有c语言基础,但是还是看不懂单片机的c编程...如何是好
1、纯粹的应用级运算或数据处理类的函数或子程序。比如获得一个四则运算的结果等。这部分程序代码以你的基础肯定能读懂,因为C51和PC机上的C语言都是一样的。2、针对单片机自身的硬件控制程序等。这部分软件其实内容不多,如果了解单片机的结构及各主要模块的功能就能理解个大概:比如定时器怎么用、怎样...

C语言编程求助!!!求高手帮忙!感激不尽!
int main(){ int i,s = 0; \/*请修改此处:int和i间有空格; 计算的和值s首先要清零 *\/ char str[80];i=0;while ((str[i]=getchar())!='\\n')i++;str[i]='\\0';for(i=0;i<80;i++)if (str[i]>='0' && str[i]<='9') \/*请修改此处:应该是同时满足这两个...

想学些c语言编程的知识,自己已经有c语言二级基础。 ,感觉知道的太少...
经过这个写代码的过程后,你会无形中发现,写出C代码,其实也很简单。在你经历过这个过程后,你就可以用C语言基于特定操作系统做些深入的东西了,你就可以深入学习linux环境编程了。我个人觉得,不要听别人说,学完C语言再去学别的语言,C语言是你学习编程的入门基础,但不是别的语言的基础。C语言基础...

我想学一点网络编程,最基础的,帮我介绍一下!
第一步 掌握一门.NET面向对象语言,C#或VB.NET。我强烈反对在没系统学过一门面向对象(OO)语言的前提下去学ASP.NET。ASP.NET是一个全面向对象的技术,不懂OO,那绝对学不下去!第二步 对.NET Framework类库有一定的了解 可以通过开发Windows Form应用程序来学习.NET Framework。ASP.NET是建构在....

学网络编程需要学习那些课程?
第一阶段 1、计算机操作基础 2、Office办公自动化 3、计算机组装与维护 4、C语言 第二阶段 1、SQL Server2005数据库设计 2、和高级查询 3、数据结构 4、C#面向对象程序设计 5、HTML5与CSS3开发 6、JavaScript 7、jQuery高级编程 8、PHP开发 第三阶段 APP Development 1、JavaScript特效制作 2、...

计算机基础语言,C语言,或者VB。学习网络原理。 去哪学? 但不知路怎么...
都可以,关键看你的情况。如果条件允许,去学校较好,会比较系统,有较好的资源。如果没有条件,也可自学,不过学语言不论C,还是VB,都必须上机,必须解决,并且要有很强的自制力,有很强的自学能力。很具您的情况决定吧!

相似回答