Итак, я делаю здесь несколько клиентских файлов, и я хочу, чтобы мой сервер прослушивал клиентов, а когда клиент подключается к серверу, клиент отправляет строка. Соединение устанавливает, клиенты отправляют его строку, но на стороне сервера recv() возвращает -1.C Сокеты - send() отправляет, recv() не получает
/* Server */
int main() {
int fd, conn_fd;
struct sockaddr_in ad;
int bytes;
char recv_buffer[256];
fd = socket(AF_INET, SOCK_STREAM, 0);
ad.sin_family = AF_INET;
ad.sin_port = htons(3335);
ad.sin_addr.s_addr = htonl(INADDR_ANY);
bind(fd, (struct sockaddr*)&ad, sizeof(ad));
listen(fd, 5);
conn_fd = accept(fd, (struct sockaddr*)0, 0);
bytes = recv(fd, recv_buffer, sizeof(recv_buffer), 0);
printf("%d\n", bytes);
return 0;
}
клиенты просто подключается к серверу: /* Клиент */
int main() {
int fd, n;
unsigned int s;
struct sockaddr_in addr;
fd = socket(AF_INET, SOCK_STREAM, 0);
addr.sin_family = AF_INET;
addr.sin_port = htons(3335);
addr.sin_addr.s_addr = inet_addr("127.0.0.1");
char buff[256] = "time";
printf("Connecting to server....\n");
if(connect(fd, (struct sockaddr*)&addr, sizeof(addr)) < 0) {
printf("connect() error.\n");
exit(1);
}
s = send(fd, buff, sizeof(buff), 0);
return 0;
}
Спасибо!
Когда 'recv' возвращает' -1', это происходит из-за ошибки. Проверьте переменную 'errno' для получения дополнительной информации об ошибке. http://man7.org/linux/man-pages/man3/errno.3.html Список ошибок из 'recv' перечислены здесь: http://man7.org/linux/man-pages /man2/recv.2.html –
Вызов 'perror', если' recv' возвращает -1. Это скажет вам, почему это произошло. Кроме того, вы должны добавить проверку ошибок ко всем функциям сокета с вызовом 'perror' в случае ошибки. – dbush
Это может быть связано с тем, что вы не получаете правильное гнездо. –