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