首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从同一个套接字发送和接收?

如何从同一个套接字发送和接收?
EN

Stack Overflow用户
提问于 2013-07-17 06:14:42
回答 2查看 3.4K关注 0票数 2

我正在浏览Beej的指南,我想详细说明其中的一个示例,一个流客户端/服务器示例。在本例中,服务器发送消息,客户端接收消息。

我想做一个发送和接收消息的程序。在这种情况下,它将不再是服务器/客户端体系结构,因为以前的服务器和客户端都将执行相同的职责。它们会非常相似。

在该示例中,服务器执行以下操作:

代码语言:javascript
复制
 getaddrinfo(NULL, PORT, &hints, &p);
 sockfd = socket(p->ai_family, p->ai_socktype, p->ai_protocol));
 bind(sockfd, p->ai_addr, p->ai_addrlen);
 listen(sockfd, BACKLOG);
 new_fd = accept(sockfd, (struct sockaddr *)&their_addr, &sin_size);
 send(new_fd, "Hello, world!", 13, 0);

为了从同一套接字接收消息,我需要添加什么?有可能吗?

我尝试了许多不起作用的方法,比如尝试使用原始的socketfd连接()和使用目的地信息。最后,我使用了两个套接字,并在setsockopt()的帮助下将它们绑定到同一个端口,但我想知道是否有更好或更有效的方法。

EN

回答 2

Stack Overflow用户

发布于 2013-07-17 06:25:08

您可以从任何连接的套接字执行sendrecv操作。

数据流的方向与客户端/服务器关系没有任何关系。

客户端和服务器同时发送和接收是很常见的。他们用来发送和期望答案的模式称为protocol (从应用程序定义的协议的意义上讲)。

票数 4
EN

Stack Overflow用户

发布于 2013-07-17 06:35:14

他们说“你需要两个人来探戈”。

客户端/服务器通信(协议)也是如此。

您的问题可能源于这样一个事实,即服务器不理解您的客户端已经完成了数据发送,并且没有生成回复。

有几个选项可以表示通信结束,这里仅举几个例子:

  • 关闭来自客户端的套接字输出,这将使服务器检测到EOF。
  • 告诉服务器您正在发送的字节数。服务器将读取该数字,然后在读取该字节数之后将向您发送回复。
  • 编码一些神奇的字节序列,它向服务器发出信号
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17687919

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档