Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 为什么我的程序不能用printf输出任何东西?_C_Network Programming - Fatal编程技术网

C 为什么我的程序不能用printf输出任何东西?

C 为什么我的程序不能用printf输出任何东西?,c,network-programming,C,Network Programming,我是一名网络编程课程的学生,我正在编写一个UDP客户端,它连接到三台服务器进行文件传输。到目前为止,我已经让客户端与前两台服务器通信,但服务器的第三个副本不起作用。它甚至没有打印出我输入的printf调试语句。发生了什么事?Unix有什么问题吗?前两个服务器与此服务器完全相同,端口/ip地址发生了变化,它们工作得非常好 #include <stdlib.h> #include <arpa/inet.h> #include <netinet/in.h> #inc

我是一名网络编程课程的学生,我正在编写一个UDP客户端,它连接到三台服务器进行文件传输。到目前为止,我已经让客户端与前两台服务器通信,但服务器的第三个副本不起作用。它甚至没有打印出我输入的printf调试语句。发生了什么事?Unix有什么问题吗?前两个服务器与此服务器完全相同,端口/ip地址发生了变化,它们工作得非常好

#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");
   }
}
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
int main(int argc,字符**argv)
{
printf(“我会毁掉你”);
INTO=1;
int-sockfd,n;
servaddr、cliaddr中的结构sockaddr\u;
索克伦;
char-mesg[1000];
printf(“我很困惑”);
sockfd=插座(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.sinu port=htons(3454);
绑定(sockfd,(struct sockaddr*)&servaddr,sizeof(servaddr));
printf(“yowtf”);
if(setsockopt(sockfd,SOL_SOCKET,SO_REUSEADDR,&o,sizeof(o))<0){
perror(“设置锁定失败”);
出口(0);
}
printf(“此处1”);
而(1)
{
len=sizeof(cliaddr);
printf(“此处”);
n=recvfrom(sockfd,mesg,1000,0,(结构sockaddr*)和cliaddr,&len);
sendto(sockfd,mesg,n,0,(struct sockaddr*)和cliaddr,sizeof(cliaddr));
printf(“--------------------------------------------------------------\n”);
mesg[n]=0;
printf(“收到以下信息:\n”);
printf(“%s”,mesg);
printf(“--------------------------------------------------------------\n”);
}
}

您没有刷新
stdout

或者,使用中的
stderr

fprintf(stderr,"My message\n");

您没有刷新
stdout

或者,使用中的
stderr

fprintf(stderr,"My message\n");

您可能需要更改,例如,
printf(“我会毁掉你”)
printf(“我会毁掉你”)
。或参见
setbuf()
。或者使用
fflush(stdout)

您可能需要将例如
printf(“我会毁灭你”)
更改为
printf(“我会毁灭你”)
。或参见
setbuf()
。或者使用
fflush(stdout)

作为开始,将
\n
放在
printf
字符串的末尾。您可能看不到它们,因为它们已缓冲。如果希望输出消息显示,请确保它们以换行结束。前两个
printf()
语句不会以换行符结尾;只有在输出换行符,或使用
fflush(stdout)
(或在一行上打印太多数据,使其不再适合
stdout的
文件*
中的缓冲区)后,才会显示其输出。
printf(3)
输出通常是缓冲的,只有在缓冲区(largeish)填满时才会写入。您可以使用
fflush(stdout)
强制输出。首先,请将
\n
放在
printf
字符串的末尾。您可能看不到它们,因为它们已缓冲。如果希望输出消息显示,请确保它们以换行结束。前两个
printf()
语句不会以换行符结尾;只有在输出换行符,或使用
fflush(stdout)
(或在一行上打印太多数据,使其不再适合
stdout的
文件*
中的缓冲区)后,才会显示其输出。
printf(3)
输出通常是缓冲的,只有在缓冲区(largeish)填满时才会写入。您可以使用
fflush(stdout)
强制输出。它现在可以打印了。为什么需要换行符?有时在我的其他程序中我忽略了它,但它仍然显示在终端提示之前的某个地方。
scanf
,etc使用
stdin
,与
stdout
,这样提示就不会被乱码。一个小点是:行
mesg[n]=0不太正确
n
可能是
1000
,因此nul放在数组末尾。(当然,如果您希望检查错误,
n
可以是-1。)请看,从stdin读取是否会刷新stdout?但是那里的答案似乎与我的评论不一致。
\n
总是保证齐平吗?现在可以打印了。为什么需要换行符?有时在我的其他程序中我忽略了它,但它仍然显示在终端提示之前的某个地方。
scanf
,etc使用
stdin
,与
stdout
,这样提示就不会被乱码。一个小点是:行
mesg[n]=0不太正确
n
可能是
1000
,因此nul放在数组末尾。(当然,如果您希望检查错误,
n
可以是-1。)请看,从stdin读取是否会刷新stdout?但是那里的答案似乎与我的评论不一致。
\n
是否总是保证同花顺?