【问题标题】:2-way communication with C sockets与 C 套接字的 2 路通信
【发布时间】:2011-03-31 06:38:37
【问题描述】:

我正在尝试在 C 套接字之间运行 2 路通信。为了设置套接字,我按照此链接 (http://www.linuxhowtos.org/C_C++/socket.htm) 上的说明进行操作,一切正常。将消息从客户端发送到服务器非常有效。

但是,我还希望服务器能够将响应消息发送回客户端。这是如何实现的?如果我在两端都设置了客户端和服务器连接,其中一个无法绑定。

编辑更多代码。目前,我已经使用这种样式的套接字并将它们放入 c++ 代码中,只是因为那是我的熟悉。忽略面向对象。

//main call
if (server)
    {
        Connection recv(true, "servername");
        recv.GetMsg();
        recv.SendMsg("test", 4);
    }
    else // client
    {
        Connection snd(false, "servername");
        snd.GetMsg();
        snd.SendMsg("this is a test", 14);
    }

在 Connection 类中,

void SendMsg(char *msg, int msg_length)
{
        send(some_socket, msg, msg_length, 0);
};

void GetMsg()
{
        recvd = recv(opponent_socket, buffer, sizeof(buffer), 0);
        buffer[recvd] = '\0';
        cout << "Printing msg: " << buffer << endl;
};

Connection::Connection(bool isserver, char *servername)
{
    is_server = isserver;
    server = servername;
    opponent_socket = 0;
    some_socket = socket(PF_INET, SOCK_STREAM, 0);

    if (some_socket < 0)
    {
        cout << "Connection failed.\n" << endl;
        exit(-1);
    }

    if (is_server)
    {
        AddrSetupServer(); // standard calls here.  Pretty well what's shown in link provided
        BindServer();
        ListenServer();
        WaitConnectionServer();
    }
    else
    {
        AddrSetupClient();
        ConnectClient();
    }
};

【问题讨论】:

    标签: c sockets networking


    【解决方案1】:

    一旦建立连接,它就是双向的;只需通过套接字发送您的响应。

    【讨论】:

    • 以与客户端代码完全相同的方法发送响应?当我尝试这样做时,我得到了“断管”。
    • 在尝试这个的不同场景中,我得到的是咕哝的垃圾,而不是发送的消息。
    • 客户端是否在阅读回复?如果它只是发送内容并关闭套接字/出口,那么您在尝试响应不再存在的客户端时当然会出错。此外,如果您将代码添加到问题中也会有所帮助。
    • 所以我在这里看到的是两端首先是GetMsg,然后是SendMsg。其中一个应该SendMsg 首先 另一个到GetMsg,然后GetMsg 接收响应SendMsg
    • 对不起,是的。我只是在复制粘贴之前玩弄东西。通常情况下是这样。服务器对象将获得正确的“这是一个测试”,而客户端对象将收到“X?/”流并无限循环。
    猜你喜欢
    • 2011-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-20
    • 2014-07-25
    • 1970-01-01
    相关资源
    最近更新 更多