난 그냥 소켓을 코딩 만 가지고 문제를 내가 해결할 수없는 방법을 배우고 시작입니다. 텔넷 클라이언트는()
그래서 나는 텔넷 클라이언트를 만들려고하고 있었고, 난 서버에서 첫 번째 메시지를 수신 할 성공하지만,이 후 라인을 수신 붙어 내 프로그램 종류 및 다른 작업을 수행하지 않습니다. 단순한 printf 라인조차도 아니다. 사전에덕분에, 리키 여기
코드입니다 :
http://linux.die.net/man/2/recv :
#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 일 때는 어떻게됩니까? (STDERR (즉 중요)는 fprintf를 넣어 전에 RECV를 호출 한 후 정확히 n_recv 경우 성공적으로 서버에서 메시지? – xaxxon
를 받았다면? 또한, 어떻게 알 수 있습니까 세트 리턴 코드와 errno는 무엇 후 하나에 0이면 바쁜 루프에 빠질 것이고 아무 것도 출력되지 않을 것입니다 또한 어떤 데이터가 수신되고 있는지 확인하십시오 Wireshark 또는 tcpdump와 같은 트래픽으로 모니터링을 시도 했습니까? – sbaker
확인했습니다. 반환 값은 24입니다. '대신 보내 '라고한다 (0) sockfd와, 버퍼를 sizeof (버퍼), 0이 아닌 와이어 샤크와, 내가 서버에서 응답을 잃은 바로 RECV 후()와 보내기 전에(). – user2657521