【发布时间】:2014-01-11 19:07:51
【问题描述】:
我正在尝试建立客户端服务器连接。但是每次客户端进行连接时,他都会得到 0 返回值,这意味着连接成功。 我有一个预线程服务器。 假设我用 2 个线程启动我的服务器。我使用调试运行,对于前 2 个客户端,每个客户端都会从一个线程获得答案,之后它们仍然被阻塞,以便将来在套接字上进行通信。但是当我启动第三个客户端时,连接函数返回 0 这是错误的,因为服务器上没有可用的线程来接受。可能是什么问题?
在我的服务器上我有:
threadsPool = calloc(sizeof(Thread),nthreads);
if ((sd = socket (AF_INET, SOCK_STREAM, 0)) == -1)
{
perror ("[server]socket error\n");
return errno;
}
int on=1;
setsockopt(sd,SOL_SOCKET,SO_REUSEADDR,&on,sizeof(on));
bzero (&server, sizeof (server));
server.sin_family = AF_INET;
server.sin_addr.s_addr = htonl (INADDR_ANY);
server.sin_port = htons (PORT);
if (bind (sd, (struct sockaddr *) &server, sizeof (struct sockaddr)) == -1)
{
perror ("[server]bind() error\n");
return errno;
}
if (listen (sd, 2) == -1)
{
perror ("[server]listen() error\n");
return errno;
}
for(i=0; i<nthreads;i++) threadCreate(i);
for ( ; ; )
{
printf ("[server]wait on port...%d",PORT);
pause();
}
};
在我的客户端我有:
if ((sockdescr = socket (AF_INET, SOCK_STREAM, 0)) == -1)
{
strcpy(received, "socket() error");
return false;
}
server.sin_family = AF_INET;
server.sin_addr.s_addr = inet_addr(addr);
server.sin_port = htons (port);
int sc = connect (sockdescr, (struct sockaddr *) &server,sizeof (struct sockaddr));
if (sc == -1)
{
strcpy(received, "connect() error");
return -1;
}
return 0;
【问题讨论】:
-
好的,我现在添加了一些代码。
标签: multithreading sockets connect