我正在尝试从客户端向服务器发送消息,反之亦然。消息接收正确,但我必须在每条消息的末尾放置一个 *
。
我使用的控制循环是*buffer != '*'
。我尝试用 \n
替换或通过 static_cast
为 10 的 ASCII 值进行检查,但消息没有发送。
如何在用户输入新行 (\n) 时传输消息。我正在考虑 cin.getline
。可以用指针使用它吗?
服务器.cpp
do {
recv(server, buffer, bufsize, 0);
cout << buffer << " ";
if (*buffer == '#') {
*buffer = '*';
isExit = true;
}
} while (*buffer != '*');
do {
cout << "\nServer: ";
do {
cin >> buffer;
send(server, buffer, bufsize, 0);
if (*buffer == '#') {
send(server, buffer, bufsize, 0);
*buffer = '*';
isExit = true;
}
} while (*buffer != '*');
cout << "Client: ";
do {
recv(server, buffer, bufsize, 0);
cout << buffer << " ";
if (*buffer == '#') {
*buffer == '*';
isExit = true;
}
} while (*buffer != '*');
} while (!isExit);
客户端.cpp
do {
cout << "Client: ";
do {
cin >> buffer;
send(client, buffer, bufsize, 0);
if (*buffer == '#') {
send(client, buffer, bufsize, 0);
*buffer = '*';
isExit = true;
}
} while (*buffer != 42);
cout << "Server: ";
do {
recv(client, buffer, bufsize, 0);
cout << buffer << " ";
if (*buffer == '#') {
*buffer = '*';
isExit = true;
}
} while (*buffer != 42);
谢谢!
最佳答案
您只是在检查缓冲区的第一个字符。您需要一次读取一个字节(糟糕)或扫描整个缓冲区以查找分隔符。
请注意,它可能在中间,在另一条消息的部分或全部之前。
关于C++ 套接字 - 使用新行发送消息 (linux),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31442163/