【发布时间】:2014-06-10 15:02:28
【问题描述】:
我可以将客户端连接到 4 个服务器吗?我必须检查女巫一个是否活跃。但是当我运行我的程序时,它适用于第一台服务器。对于下一个服务器,出现错误:“传输端点已连接” 我的代码:
void contact(int socket, int argc, char **argv, node **server_threads)
{
pthread_t s;
int socketFd, newsockfd,i;
struct sockaddr_in serverAddr;
socklen_t clientlen = sizeof(clientAddr);
for(i=3;i<argc;i=i+2)
{
serverAddr = makeClientAddress(argv[i],atoi(argv[i+1]));
if(connect(socketFd,(struct sockaddr *) &serverAddr,sizeof(struct sockaddr_in))<0)
error("connect");
}
while(newsockfd = accept(sockfd, (struct sockaddr *) &(clientAddr), &clientlen))
{
printf("Server is active\n");
insert_at_end(server_threads, NULL,NULL,&s);
pthread_create(&s, NULL, (void*)connect_with_server,&sockfd);
}
void connect_with_server(void* arg){
int* sock=(int*)arg;
while(1)
{
if(read(sock,(char *)data,sizeof(int32_t[5]))<(int)sizeof(int32_t[5])) ERR("read:");
printf("Signal from server\n");
}
【问题讨论】:
-
在重新连接之前关闭套接字。
-
"我可以用 4 个服务器连接客户端吗?"当然——您的网络客户端(浏览器)是否支持向不同网站打开多个标签?
-
你的客户为什么打电话给
accept()? -
socket,socketFd,sockFd,newsockfd... hu... 很多客户端的套接字描述符。每个连接一个就足够了,至少如果它是通过调用socket()成功初始化的。 -
因为在我的程序中,服务器也是客户端并尝试检查另一台服务器...所以它必须调用函数接受和连接...