我正在构建一个客户端和服务器程序。下面是服务端main函数中引用socket的代码:
listenfd = socket(AF_INET, SOCK_STREAM, 0);
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);
serv_addr.sin_port = htons(5000);
bind(listenfd, (struct sockaddr*)&serv_addr, sizeof(serv_addr));
listen(listenfd, 10);
pthread_t thread[10];
while(1)
{
connfd[i] = accept(listenfd, (struct sockaddr*)NULL, NULL);
//I WANT TO GET THE IP ADDRESS HERE
if( pthread_create(&thread[i], NULL, listener, NULL ) != 0 )
{
printf("Cannot create thread , exiting \n ");
exit(-1);
}
i++;
}
线程如下:
void * listener( void * temp_pt )
{
int connfdLocal=connfd[i];
while ( (n = read(connfdLocal, recvBuff, sizeof(recvBuff)-1)) > 0)
{
printf("TESTING LISTENER");
write(connfdLocal, "TEST", strlen("TEST"));
}
if(n <= 0)
{
printf("\n Connection lost \n");
close(connfdLocal);
return 0;
}
}
好吧,我有3个问题:
由于某种原因,线程在与客户端的连接关闭之前不会打印“TESTING LISTENER”,我必须关闭客户端的连接。同样,直到我关闭服务器上的连接,字符串“TEST”才会发送到客户端。为什么会这样?我该如何解决?
建立连接后有什么方法可以获取客户端的IP地址?就在我输入“我想在这里获取 IP 地址”的地方
有人可以向我解释一下,当客户端关闭套接字时,'n' 是如何立即变为 0 的?我以为 read 函数只运行一次,n 值只设置一次。