c - Socket编程C(Linux Ubuntu)

标签 c linux sockets ubuntu p2p

我正在编写一个使用 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/

相关文章:

C: 扫描的双数组值为什么变化?

c - 如何使用 C 通过串行端口将十六进制数据发送到自定义仪器中?

linux - 在远程Linux虚拟服务器上部署Qt5-console-app

c# - 使用具有已知 IP 端点的 System.Net.WebRequest

c - 使用但未定义的标签

java - 尝试将 TCHAR 类型发送到接受字符串作为参数的 java 函数时,jvm 崩溃

c++ - 为什么阻塞套接字会重复返回 0 长度数据?

java - 在java中使用FTP程序

linux - 如何添加新的 Mime 类型并关联到新的应用程序?

linux - genymotion 抛出 libssl_conf.so : cannot open shared object file: No such file or directory