我是網絡編程課的學生,我正在寫一個UDP客戶端,連接到三臺服務器來完成文件傳輸。到目前爲止,我已經讓客戶端與前兩臺服務器通信,但服務器的第三個副本不工作。它甚至沒有打印出我輸入的printf調試語句。發生了什麼? Unix有什麼問題嗎?前兩臺服務器與此端口/ 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");
}
}
首先,將'\ n'放在'printf'字符串的末尾。你可能沒有看到它們,因爲它們被緩衝了。 – paxdiablo 2013-02-20 03:45:22
如果您希望輸出消息出現,請確保它們以換行符結束。你的前兩個'printf()'語句不會以換行符結束;它們的輸出在你輸出一個換行符或者使用'fflush(stdout)'(或者在一行中打印出不再符合'stdout'的FILE *'的緩衝區中的數據) 。 – 2013-02-20 03:45:59
'printf(3)'輸出通常是緩衝的,只有當緩衝區(大量)填滿時纔會寫出。你可以用'fflush(stdout)'強制輸出。 – vonbrand 2013-02-20 03:46:44