Есть две программы:
// Chat_Server.cpp
#include <iostream>
#include <vector>
#include <winsock2.h>
#pragma comment(lib, "ws2_32.lib")
using namespace std;
char* ReadLine(SOCKET source);
int main()
{
WSADATA wd;
WSAStartup(WINSOCK_VERSION, &wd);
SOCKET server = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
SOCKADDR_IN name;
name.sin_family = PF_INET;
name.sin_addr.s_addr = inet_addr("127.0.0.1");
name.sin_port = htons(4000);
bind(server, (LPSOCKADDR)&name, sizeof(name));
listen(server, SOMAXCONN);
SOCKET client = accept(server, NULL, NULL);
cout << ReadLine(client);
closesocket(server);
closesocket(client);
WSACleanup();
cin.get();
return 0;
}
char* ReadLine(SOCKET source)
{
vector<char> data;
char buffer;
while(recv(source, &buffer, 1, 0) != 0)
data.push_back(buffer);
int size = static_cast<int>(data.size());
char* line = new char[size + 1];
memset(line, 0, size + 1);
for(int i = 0; i < size; i++)
line[i] = data[i];
return line;
}
// Chat_Client.cpp
#include <iostream>
#include <winsock2.h>
#pragma comment(lib, "ws2_32.lib")
using namespace std;
int main()
{
WSADATA wd;
WSAStartup(WINSOCK_VERSION, &wd);
SOCKET client = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
SOCKADDR_IN name;
name.sin_family = PF_INET;
name.sin_addr.s_addr = inet_addr("127.0.0.1");
name.sin_port = htons(4000);
connect(client, (LPSOCKADDR)&name, sizeof(name));
send(client, "Text of message", sizeof("Text of message"), 0);
closesocket(client);
WSACleanup();
cin.get();
return 0;
}
Я пишу консольный чат. А вот мой вопрос: как сделать так, чтобы сервер мог не только принимать, но и передавать, а клиент — не только передавать, но и принимать. То есть взаимодействие будет такое: клиент передаёт сообщение на сервер, сервер смотрит, кому предназначается сообщение, и передаёт его клиенту-адресату.
Буду признателен за ответ.
RSDN@Home