【发布时间】:2013-12-19 10:35:01
【问题描述】:
我正在编写一个使用 TCP 通过网络进行通信的程序。如果用户提供 ip 地址作为命令行参数,程序将尝试连接到该地址。如果没有,它将等待其他人连接。为了清楚起见,即使它是 p2p 连接,我也会将等待其他人连接的一个称为服务器,另一个称为客户端。服务器接收客户端发送的任何文本消息都没有问题。但是,客户端仅在发送自己的消息时才从服务器接收文本消息。我该如何解决这个问题,以便客户端立即接收消息?这是我的代码的 sn-p
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(socket,(struct sockaddr *)&add,sizeof(add));
【问题讨论】:
-
您能在连接和发送/接收的位置显示更多代码吗?
-
while循环里面只有两行。
-
所以假设你想编写某种聊天系统,你可能需要一个接收线程,在等待用户输入时检查套接字的数据
-
您希望这个
atoi("127.0.0.1")做什么。在单独的程序中对其进行测试。
标签: c linux sockets ubuntu p2p