Потерянные данные при передаче гнезда Linux [закрыто]Linux

Ответить Пред. темаСлед. тема
Anonymous
 Потерянные данные при передаче гнезда Linux [закрыто]

Сообщение Anonymous »

Я разрабатываю приложение, похожее на 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Linux»