与C插座的双向通信

时间:2011-03-30 22:02:34

标签: c sockets networking

我正在尝试在C套接字之间运行双向通信。为了设置套接字,我按照此链接上的说明(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();
    }
};

1 个答案:

答案 0 :(得分:2)

连接后,它是双向的;只需通过套接字发送您的回复。