【发布时间】:2013-02-20 03:42:13
【问题描述】:
我是网络编程课的学生,我正在编写一个连接到三台服务器以进行文件传输的 UDP 客户端。到目前为止,我已经让客户端与前 2 台服务器进行通信,但是服务器的第 3 份副本无法正常工作。它甚至没有打印出我输入的 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");
}
}
【问题讨论】:
-
首先,将
\n放在printf字符串的末尾。您可能看不到它们,因为它们被缓冲了。 -
如果要显示输出消息,请确保它们以换行符结尾。您的前两个
printf()语句不以换行符结尾;在您输出换行符或使用fflush(stdout)(或在一行上打印太多数据以致它不再适合FILE *forstdout的缓冲区)之后,它们的输出才会出现。 -
printf(3)输出通常是缓冲的,只有当缓冲区(大)填满时才会写出。您可以使用fflush(stdout)强制输出。
标签: c network-programming