저는 네트워크 프로그래밍 수업을받는 학생이며 파일 전송을 위해 세 대의 서버에 연결하는 UDP 클라이언트를 작성하고 있습니다. 지금까지 클라이언트가 처음 두 서버와 통신하도록했지만이 세 번째 서버 복사본은 작동하지 않습니다. 그것도 내가 넣은 printf 디버그 문장을 출력하지 않는다. 무슨 일이 일어나고 있는가? 유닉스에 문제가 있습니까? 첫 번째 두 서버는 포트/IP 주소가 변경된이 서버와 정확히 동일하며 완벽하게 작동합니다.내 프로그램이 printf로 아무 것도 출력하지 않는 이유는 무엇입니까?
#include <stdlib.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <stdio.h>
#include <errno.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <strings.h>
int main(int argc, char**argv)
{
printf("i will destroy you");
int o = 1;
int sockfd,n;
struct sockaddr_in servaddr,cliaddr;
socklen_t len;
char mesg[1000];
printf("im confused");
sockfd=socket(AF_INET,SOCK_DGRAM,0);
bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr=inet_addr("127.0.0.1");
servaddr.sin_port=htons(3454);
bind(sockfd,(struct sockaddr *)&servaddr,sizeof(servaddr));
printf("yo wtf");
if (setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &o, sizeof(o)) < 0){
perror("setsockopt failed");
exit(0);
}
printf("here1");
while(1)
{
len = sizeof(cliaddr);
printf("here");
n = recvfrom(sockfd,mesg,1000,0,(struct sockaddr *)&cliaddr,&len);
sendto(sockfd,mesg,n,0,(struct sockaddr *)&cliaddr,sizeof(cliaddr));
printf("-------------------------------------------------------\n");
mesg[n] = 0;
printf("Received the following:\n");
printf("%s",mesg);
printf("-------------------------------------------------------\n");
}
}
처음에는'printf' 문자열의 끝에'\ n'을 넣으십시오. 그들이 완충 되었기 때문에 당신이 그들을 보지 못할 수도 있습니다. – paxdiablo
출력 메시지를 표시하려면 줄 바꿈으로 끝나야합니다. 처음 두 개의'printf()'문은 개행으로 끝나지 않습니다; 그것들의 출력은 개행을 출력하거나'fflush (stdout)'을 사용할 때까지 나타나지 않을 것입니다 (또는'stdout'을 위해'FILE * '에서 버퍼에 더 이상 들어 가지 않는 한 줄로 많은 양의 데이터를 출력합니다) . –
'printf (3)'출력은 보통 버퍼링되며, 버퍼 (큰)가 채워질 때만 쓰여집니다. 'fflush (stdout)'을 사용하여 강제로 출력 할 수 있습니다. – vonbrand