int main()
{
int servsocket,clientsocket;
struct sockaddr_in server,client;
FILE *file;
char filename[100];
char buf[1024];
servsocket=socket(AF_INET,SOCK_DGRAM,0);
server.sin_addr.s_addr=htonl(INADDR_ANY);
server.sin_port=htons(6003);
server.sin_family=AF_INET;
bind(servsocket,(struct sockaddr *) &server,sizeof(server) );
while(1){
int clientsize=0;
printf("Waiting for file requests \n");
recvfrom(servsocket,filename,sizeof(filename),0,(struct sockaddr *)&client,&clientsize);
file=fopen(filename,"r");
int size=0;
do
{
size=fread(buf,1,sizeof(buf),file);
printf("%d bytes read \n",size);
int sentbytes= sendto(servsocket,(const char *)buf,size,0, (struct sockaddr *) &client,sizeof(client));
printf("%d bytes sent ",sentbytes);
}while(size==sizeof(buf));
}
}
我正在尝试使用UDP制作一个简单的文件传输程序。问题是sendto()总是返回-1。这是服务器的代码。
答案 0 :(得分:0)
您的代码存在很多问题。您所看到的是您没有正确填写变量client
:clientsize
系统调用将recvfrom
参数用于输入和输出,因此您需要将其初始化为client
结构的大小:
int clientsize = sizeof(struct sockaddr_in);
另一个问题是你不是0终止filename
字符串:
n = recvfrom(...);
filename[n] = '\0';
最后,您没有测试错误(bind
,recvfrom
,sendto
等。我保证,这会让你陷入困境。