Momentan erstelle ich eine Client-Server-Konsolenanwendung in C++. Unter Verwendung der winsock2.h
-Bibliothek und des UDP-Protokolls verwenden wir sendto
und recvfrom
, um Nachrichten als Zeichenfolgen vom Client zum Server zu senden, der die Nachricht dann an einen anderen Client sendet, wenn der Client1 eine Nachricht an client2, client2 sendet empfängt die Nachricht erst, wenn sie versucht, eine Nachricht an Client1 zu senden. Ich möchte das Programm wie einen Instant Messenger funktionieren lassen, so dass client2 es fast sofort erhält, wenn client1 eine Nachricht an client2 sendet, ohne zuerst eine Nachricht senden zu müssen.Wie kann man ein synchrones Chat-Programm erstellen, um Nachrichten synchron zu senden und zu empfangen?
Auch wenn client1 eine Nachricht an client2 senden würde, wäre client1 nicht in der Lage, eine andere Nachricht zu senden, es sei denn, client2 hätte auf die erste geantwortet.
Wenn Sie weitere Informationen benötigen oder um Code zu sehen, fragen Sie einfach.
Der Code senden:
while(getline(cin, line))
{
// send a string to the server.
sendto(hSocket, line.c_str(), line.size(), 0,
reinterpret_cast<sockaddr*>(&serverAddress),
sizeof(serverAddress));
// recieve the response.
int n = recvfrom(hSocket, recvLine, MAXLINE, 0, NULL, NULL);
if(n == -1)
{
cout << "no reply" << endl;
}
else
{
recvLine[n] = 0;
string const terminateMsg = "server exit";
string msg = recvLine;
if(msg == terminateMsg)
{
cout << "Server terminated" << endl;
break;
}
cout << n << ": " << recvLine << endl;
}
}
Siehe [Boost.ASIO] (http://www.boost.org/libs/asio/). Es kommt sogar mit [einem Beispiel] (http://www.boost.org/doc/html/boost_asio/examples.html#boost_asio.examples.chat) für dieses genaue Szenario. – ildjarn
@ildjarn danke, sie sind das Beispiel, was ich will, aber ich würde lieber mit der Winsock-Bibliothek bleiben – Beef
Sie sind für viel mehr (sehr hässlich) Arbeit dann. ; -] – ildjarn