微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Socket编程CLinux Ubuntu

我正在编写一个使用TCP通过networking进行通信的程序。 如果用户提供ip地址作为命令行参数,程序将尝试连接到该地址。 如果没有,它将等待其他人连接。 为了清楚起见,即使它是p2p连接,我将调用等待其他人连接作为服务器和另一个作为客户端。 服务器没有问题接收客户端发送的任何文本消息。 但是,客户端只有在发送自己的消息时才会收到来自服务器的文本消息。 我如何解决这个问题,让客户端立即收到消息? 这是我的代码片段

a.sin_family = AF_INET; a.sin_addr.s_addr = iet_addr(SERVER_IP); addr.sin_port = htons((unsigned short)SERVER_PORT);

在这里,我使用了用于发送的相同套接字。 我需要创build一个新的听力?

fgets(buffer,sizeof(buffer),stdin); send(socket,buffer,strlen(buffer),0); b = recv(socket,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);

编辑:这是绑定代码

我们怎样才能将一个string转换为int为非常大的整数值?

sox FAIL util:无法加载MAD解码库(libmad)函数“mad_stream_buffer”

如何将另一个应用程序的窗口句柄最小化到系统托盘?

如何检测不同的Windows目标平台?

调用`fprintf(stdout,…)`和`fprintf(stderr,…)`保证与multithreading不交错?

bind(socket,(struct sockaddr *)&add,sizeof(add));

C ++ / COM / Proxy Dlls:方法重写/方法转发(COM实现inheritance)

套接字失败后重新写入

进程之间的通信

对“JNI_CreateJavaVM”窗口的未定义引用

有没有办法使用_snprintf_s来确定目标缓冲区大小?

我需要创建一个新的听力?

是的,因为套接字将被绑定到不同的地址。

您可以通过该套接字从服务器接收数据,但要接受新的连接,您需要一个侦听器套接字和每个其他客户端的一个套接字。 请记住,套接字是通信的端点 。

你的程序的问题是,你正在使用阻塞的I / O调用,当你想要一些与严格的请求 – 回复机制不同的东西时,这很难管理。 例如,当fgets正在等待用户输入时,您不会偷看网络,并且在fgets完成之前,您将不会收到发送给您的消息,只有当用户点击Enter 。 如果用户一个小时内没有按任何键,你的程序将在fgets等待一个小时。

为了达到这个目的,你必须将网络代码用户输入代码中分离出来(你不能等待其中的任何一个无限地阻止来自另一个的流量)。 通常,这可以通过使用线程来完成(所以阻塞的I / O调用阻塞了一个线程),或者使用非阻塞的I / O(因此没有I / O调用阻塞任何东西)。 在使用C时,我会选择后者。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐