2011-03-30 70 views
1

我想在C插座之间运行2路通信。为了建立套接字,我按照这个链接上的指示(http://www.linuxhowtos.org/C_C++/socket.htm),一切正常。从客户端发送消息到服务器工作得很好。与C插座的双向通信

但是,我还希望服务器能够将响应消息发送回客户端。这是如何完成的?如果我在两端建立了客户端和服务器连接,则其中一个不能绑定。

编辑更多代码。目前,我已经使用这种套接字风格并将它们放入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); 
    } 

和连接类中,

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(); 
    } 
}; 

回答

2

一旦你有一个连接,它是双向的;只需通过套接字发送您的响应。

+0

与客户端代码发送响应的方法完全相同吗?当我尝试时,我得到“破管”。 – watercha 2011-03-30 22:05:06

+0

而在另一个尝试这种情况下,我得到了嘟garbage垃圾,而不是发送的消息。 – watercha 2011-03-30 22:07:02

+0

客户是否阅读回复?如果它只是发送东西并关闭套接字/退出,当然你会遇到一个错误,试图响应不存在的客户端。另外,如果您将代码添加到问题中,这将有所帮助。 – geekosaur 2011-03-30 22:09:31