我正在编写一个使用 TCP 通过网络进行通信的程序。如果用户提供 IP 地址作为命令行参数,程序将尝试连接到该地址。如果没有,它将等待其他人连接。为了清楚起见,即使它是 p2p 连接,我也会将等待其他连接的连接称为服务器,将另一个称为客户端。服务器接收客户端发送的任何文本消息都没有问题。然而,客户端只有在发送自己的消息时才接收来自服务器的文本消息。如何解决这个问题以便客户端立即收到消息?这是我的代码片段
a.sin_family = AF_INET;
a.sin_addr.s_addr = iet_addr(SERVER_IP);
addr.sin_port = htons((unsigned short)SERVER_PORT);
这里我使用与发送相同的套接字。我需要创建一个新的来收听吗?
fgets(buffer,sizeof(buffer),stdin);
send(socket,buffer,strlen(buffer),0);
b = recv(socket,buffer,sizeof(buffer),0);
buffer[b] = 0;
printf("%s",buffer);
编辑:这是用于监听套接字
add.sin_family = AF_INET;
add.sin_addr.s_addr = htonl(atoi("127.0.0.1"));
add.sin_port = htons((unsigned short)NEWPORT);
编辑:这是绑定(bind)代码
bind(socket,(struct sockaddr *)&add,sizeof(add));
最佳答案
Do I need to create new one for listening?
是的,因为套接字将绑定(bind)到不同的地址。
您可以通过该套接字从服务器接收数据,但要接受新连接,您需要一个监听器套接字和每个其他客户端 1 个套接字。请记住,套接字是通信端点。
关于c - Socket编程C(Linux Ubuntu),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20349979/