Я только начинаю изучать, как кодовое сокет, но с проблемой я не могу решить.telnet клиент не отвечает после recv()
поэтому я пытался создать telnet-клиент, и мне удалось получить первое сообщение с сервера, но после этой строки приема моя программа застряла и ничего не сделает. даже не простая строка printf.
спасибо заранее, Рики
вот код:
#include <stdio.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
void error_msg(char msg[256]){
printf("error at %s\n", msg);
}
void main(){
struct sockaddr_in serv_addr;
char buffer[2048], server_reply[2048];
printf("trying to connect to []...\n");
int sockfd = socket(AF_INET, SOCK_STREAM, 0);
if(sockfd<0) error_msg("socket");
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = inet_addr("192.168.0.1");
serv_addr.sin_port = htons(23);
int conn = connect(sockfd,(struct sockaddr *) &serv_addr,sizeof(serv_addr));
if(conn<0) error_msg("connect");
printf("connected to server\n");
bzero(server_reply, 2048);
bzero(buffer, 2048);
while(1){
int n_recv = recv(sockfd , server_reply , sizeof(server_reply) , 0);
if(n_recv > 0){
printf("%s", server_reply);
sleep(1);
scanf("%s" , buffer);
int n_send = send(sockfd , buffer , sizeof(buffer), 0);
if(n_send < 0) printf("send error, server is not responding...\n");
}
if(n_recv < 0) printf("recv error, server is not responding...\n");
}
close(sockfd);
}
Вы печатаете, когда оно> 0, <0, но как насчет 0? Поместите fprintf (STDERR (это важно) до и после вызова recv и в один после того, что именно есть код возврата и errno? Также, как вы узнаете, успешно ли вы получили сообщение с сервера? – xaxxon
Если n_recv 0, вы были бы в цикле занятости - ничего не было бы напечатано. Кроме того, вы уверены, что данные получены. Пробовали ли вы отслеживать трафик с помощью чего-то вроде Wireshark или tcpdump? – sbaker
Я проверил. , а не 0. с wirehark, я потерял ответ от сервера сразу после recv() и перед send(). – user2657521