一个TCP套接字,用于发送和接收报文



下午好。任务是编写一个程序,该程序将在不同网络上的两台机器上运行。该程序应该与另一个网络上的相同程序建立TCP连接,并且它们应该交换数据包。这是我第一次遇到这样的任务,所以出现了一些困难。

在经典的客户机/服务器架构中,有一个用于接收消息的套接字和一个用于发送消息的套接字。由于我的程序实际上结合了客户机和服务器,问题是-是否有可能在同一个TCP套接字上实现接收和发送?

逻辑如下-我们创建一个tcp套接字(在sockaddr_in中我们填写本地机器的Ip和端口),我们绑定,然后我们监听。然后我们执行connect(在sockaddr_in中,填写我们想要连接的第二台机器的Ip和端口)并接受。结果是connect,我们向第二台机器上的监听队列发送请求,然后,通过accept,我们将该请求从队列中取出并获得套接字描述符,通过它我们已经发送和接收消息。

这个逻辑会工作吗,或者你需要做一些不同的事情吗?

谢谢你。

正如Abhinav所说,您应该使用命令行来指定您希望程序具有的行为。一个好的方法是:

$ my_program :28728      # try to listen as a server on port 28728
$ my_program hostname:28728    # try to connect as a client

您可以从int main(int argc, const char* argv[])->if (argc == 2)然后argv[1]将有一些文本,并且您可以查看第一个字符是否为':'以知道在哪种模式下运行程序。

对于TCP服务器模式,创建一个socketbindlistenaccept客户端连接。对于TCP客户端模式,创建一个socketconnect到服务器。

一旦连接,TCP连接是对等连接,双方都有同等的权限使用send()recv()发送和接收数据。

每当我想写这类代码时,我就会求助于GCC libc示例:https://www.gnu.org/software/libc/manual/html_node/Server-Example.html和https://www.gnu.org/software/libc/manual/html_node/Byte-Stream-Example.html来提醒我所有的步骤。

最新更新