Я разрабатываю приложение, похожее на Telnet для изучения программирования Linux, в C, и я столкнулся с проблемой передачи, когда отправляю два сообщения в взрыве. Это поток с использованием IPv4
Я использовал специальный символ STX '\ 002' и EOT '\ 004', чтобы отделить сообщения друг от друга, поскольку они были «объединены», если они были отправлены сразу после другого . Но программа Иногда не удалось отправить сообщение после символа EOT, в результате чего второе сообщение не было отправлено. Часть после первого сообщения просто «умирает». < /P>
sendMessage(socketFD, "Joined room.");
sendRoomMenu(socketFD);
< /code>
Определения вышеуказанных функций: < /p>
void sendMessage(int socketFD, char * msg){
char buffer[BUFFERSIZE];
buffer[0] = '\0';
formatColor(YELLOW, "[SERVER] ", buffer, BUFFERSIZE);
formatColor(YELLOW, msg, buffer, BUFFERSIZE);
buffer[BUFFERSIZE - 1] = '\0';
if ( socketFD != NULL_SOCKET )
sendToClient(socketFD, buffer);
}
void sendRoomMenu(int socketFD){
char buffer[BUFFERSIZE];
buffer[0] = '\0';
formatColor(PURPLE, "\nRoom commands:\n", buffer, BUFFERSIZE);
formatColor(YELLOW,
"/lobby\n"
"/exit\n",
buffer, BUFFERSIZE
);
sendToClient(socketFD, buffer);
}
char * formatColor(enum colors color, char src[], char dest[], size_t dest_size){
// color_codes is just an array of strings, which are ANSI color codes
strncat(dest, color_codes[color], dest_size - strlen(dest));
dest[dest_size - 1] = '\0';
strncat(dest, src, dest_size - strlen(dest));
dest[dest_size - 1] = '\0';
strncat(dest, color_codes[RESET_COLOR], dest_size - strlen(dest));
dest[dest_size - 1] = '\0';
return dest;
}
< /code>
Это функции, которые готовит немного текста и отправляют его сразу после другого в приведенном выше случае, используя функцию Sendtoclient, которая ниже: < /p>
void sendToClient(int socketFD, char * msg){
char buffer[BUFFERSIZE];
buffer[0] = MSG_START;
buffer[1] = '\0';
strncat(buffer, msg, BUFFERSIZE - strlen(buffer));
buffer[BUFFERSIZE - 1] = '\0';
char * bufferEnd = strchr(buffer, '\0');
*bufferEnd = MSG_END;
ssize_t sendSize;
if ( (sendSize = send(socketFD, buffer, bufferEnd - buffer + 1, 0)) < 0 ){
printf("send error: %s\n", strerror(errno));
printAndExitFailure("");
}
}
< /code>
Как мне решить эту проблему, это побочный продукт протокола сокета, который я использую, который должен быть исправлен с помощью, например, Определенные флаги или это что -то еще?
Спасибо за ваши ответы.>
Подробнее здесь: https://stackoverflow.com/questions/795 ... ansmission
Потерянные данные при передаче гнезда Linux [закрыто] ⇐ Linux
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
IOS - Потерянные данные о временной шкале - после переустановки приложения [закрыто]
Anonymous » » в форуме IOS - 0 Ответы
- 5 Просмотры
-
Последнее сообщение Anonymous
-