Я общаюсь с сервером, отправляю сообщение с сокетом (sock_raw ..), все отлично, клиент (я), отправляю сообщение, сервер получает правильное сообщение, но когда серверу нужно отправитьэто мне (клиенту), клиент не получает нужную информацию с помощью recv from.
Я получаю это при двух вызовах server-> client:
buffer = [E] | len_buffer = [2]
buffer = [E] | len_buffer = [2]
Но мойбуфер должен быть равен этим данным и иметь такой размер:
Первый вызов (шестнадцатеричные данные с 10 байтами)
И Второй вызов (данные в шестнадцатеричном формате с 2 байтами)
Вот как я используюФункция recvfrom (t-> sock - это сокет fd сервера, t-> msg_recv - буфер, созданный для получения сообщения от сервера, а t -> _ recv - структура sockaddr * для получения):
if (recvfrom(t->sock, t->msg_recv, sizeof(t->msg_recv), 0, \
(struct sockaddr *)&t->_recv, \
(socklen_t[1]){sizeof(struct sockaddr_in)}) < 0) {
perror("recvto()");
exit(84);
}
Barmar - это результат отправки сообщения Wireshark:
Вот кодsend и recvfrom по одной функции:
int len = 0;
if (sendto(t->sock, t->buffer, t->ip->tot_len, 0,
(struct sockaddr *)&t->_sin, sizeof(t->_sin)) < 0) {
perror("sendto()");
exit(84);
}
if ((len = recvfrom(t->sock, t->msg_recv, sizeof(t->msg_recv), 0, \
(struct sockaddr *)&t->_recv, \
(socklen_t[1]){sizeof(struct sockaddr_in)})) < 0) {
perror("recvto()");
exit(84);
}