C语言编写的linux服务端聊天程序,但是运行不出来

墨霏 发布于 2014/05/16 22:01
阅读 337
收藏 0
#include<glib.h>
#include<stdio.h>
#include<fcntl.h>
#include<signal.h>
#include<sys/socket.h>
#include<sys/types.h>
#include<sys/time.h>
#include<unistd.h>
#include<netdb.h>
#include<netinet/in.h>




#define OURPORT 8088
#define MAX_USERS 8


struct _client{
gint sd;
gboolean in_use;
gchar name[64];
gchar buf[1024];
};
typedef struct _client client;
client user[MAX_USERS];


void do_service(gpointer id)
{
gint j;
char tobuf[1024];


while(read(user[GPOINTER_TO_INT(id)].sd,user[GPOINTER_TO_INT(id)].buf,1024)!= -1)
{
sprintf(tobuf,"%s:%s\n",user[GPOINTER_TO_INT(id)].name,user[GPOINTER_TO_INT(id)].buf);
for(j= 0;j<MAX_USERS;j++)
{
if(user[j].in_use)
{
write(user[j].sd,tobuf,1024);
g_print("%s",tobuf);
}
}
}
user[GPOINTER_TO_INT(id)].in_use=FALSE;
close(user[GPOINTER_TO_INT(id)].sd);
}


int main(int argc,char *argv[])
{
gint sd,newsd;
struct sockaddr_in *sin;
gint slen;
gint count= 0;
gint flags;
gchar buf[1024];
gchar tobuf[1024];
gint length,i,j;

if(!g_thread_supported())
g_thread_init(NULL);
else
g_print("thread not supported\n");
sd= socket(AF_INET,SOCK_STREAM,0);
if(sd== -1)
{
g_print("create socket error!\n");
return -1;
}


sin= g_new(struct sockaddr_in,1);
sin->sin_family=AF_INET;
sin->sin_port=OURPORT;
slen=sizeof(struct sockaddr_in);

if(bind(sd,sin,slen)< 0)
{
g_print("bind erro!\n");
return -1;
}


if(listen(sd,8)<0)
{
g_print("listen error!\n");
return -1;
}


for(i=0;i<MAX_USERS;i++)
user[i].in_use=FALSE;


flags= fcntl(sd,F_GETFL);
fcntl(sd,F_SETFL,flags&~O_NDELAY);


for(;;)
{
newsd=accept(sd,sin,&slen);
if(newsd== -1)
{
g_print("accept error!\n");
break;
}
else
{
if(count>=MAX_USERS)
{
sprintf(buf,"用户数量过多服务器不能连接。\n");
write(newsd,buf,1024);
close(newsd);
}
else
{
flags = fcntl(user[i].sd,F_GETFL);
fcntl(user[i].sd,F_SETFL,O_NONBLOCK);
user[count].sd=newsd;
user[count].in_use=TRUE;
read(newsd,user[count].name,64);
g_thread_create((GThreadFunc)do_service,(gpointer)count,TRUE,NULL);
count++;
}
}
}
close(sd);
g_free(sin);
}
我是个新手,这个是《GTK2.0编程范例》中的一个例子,为什么运行不出来呢,我在ubuntu14上和Fedora19运行都显示thread not support,请大家帮忙下,谢谢
加载中
0
风之轮
风之轮
if(!g_thread_supported()) 
g_thread_init(NULL); 
else 

g_print("thread not supported\n"); 

判断线程有无初始化,无初始化进行初始化,但是你的分支很奇怪啊


0
墨霏
墨霏

引用来自“煦风之伤”的评论

if(!g_thread_supported()) 
g_thread_init(NULL); 
else 

g_print("thread not supported\n"); 

判断线程有无初始化,无初始化进行初始化,但是你的分支很奇怪啊


这个是《gtk2.0编程范例》中的一个代码,我也不晓得怎么回事,运行了就会显示thread not support,是我少安装了什么东西,还是哪里出问题了,谢谢
0
ruki
ruki
改成 if(g_thread_supported()) g_thread_init(NULL); else g_print("thread not supported\n"); 试试
返回顶部
顶部