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();
}
};
与客户端代码发送响应的方法完全相同吗?当我尝试时,我得到“破管”。 – watercha 2011-03-30 22:05:06
而在另一个尝试这种情况下,我得到了嘟garbage垃圾,而不是发送的消息。 – watercha 2011-03-30 22:07:02
客户是否阅读回复?如果它只是发送东西并关闭套接字/退出,当然你会遇到一个错误,试图响应不存在的客户端。另外,如果您将代码添加到问题中,这将有所帮助。 – geekosaur 2011-03-30 22:09:31