我正在浏览Beej的指南,我想详细说明其中的一个示例,一个流客户端/服务器示例。在本例中,服务器发送消息,客户端接收消息。
我想做一个发送和接收消息的程序。在这种情况下,它将不再是服务器/客户端体系结构,因为以前的服务器和客户端都将执行相同的职责。它们会非常相似。
在该示例中,服务器执行以下操作:
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()的帮助下将它们绑定到同一个端口,但我想知道是否有更好或更有效的方法。
发布于 2013-07-17 06:25:08
您可以从任何连接的套接字执行send和recv操作。
数据流的方向与客户端/服务器关系没有任何关系。
客户端和服务器同时发送和接收是很常见的。他们用来发送和期望答案的模式称为protocol (从应用程序定义的协议的意义上讲)。
发布于 2013-07-17 06:35:14
他们说“你需要两个人来探戈”。
客户端/服务器通信(协议)也是如此。
您的问题可能源于这样一个事实,即服务器不理解您的客户端已经完成了数据发送,并且没有生成回复。
有几个选项可以表示通信结束,这里仅举几个例子:
https://stackoverflow.com/questions/17687919
复制相似问题