2016-03-25 15 views
-2

"C" dosyasında bir dosyayı aktarmak için UDP istemci sunucusu için yazılı kodum var. Hem istemci hem de sunucu herhangi bir hata olmadan derlenmiştir. Ancak, istemci çalıştırıldığında bir çalışma zamanı hatası gösteriliyor "segmentation fault (core damperli)". Herhangi bir çözüm??Bir dosya aktarımı için udp istemci sunucu programında Segmentation fault (çekirdek bırakılmış)

benim kodu: gdb debugger kullanırsanız

server.c

#include<stdio.h> 
#include<string.h> 
#include<stdlib.h> 
#include<sys/socket.h> 
#include<sys/types.h> 
#include<netinet/in.h> 
#define SERV_PORT 6349 
int main(int argc,char **argv) 
{  
char filename[80],recvline[80]; 
FILE *fp; 
struct sockaddr_in servaddr,cliaddr; 
int clilen,sockfd; 
sockfd=socket(AF_INET,SOCK_DGRAM,0); 
bzero(&servaddr,sizeof(servaddr)); 
servaddr.sin_family=AF_INET; 
servaddr.sin_port=htons(SERV_PORT); 
bind(sockfd,(struct sockaddr*)&servaddr,sizeof(servaddr)); 
clilen=sizeof(cliaddr); 
recvfrom(sockfd,filename,80,0,(struct sockaddr*)&cliaddr,&clilen); 
printf("\n date in the file is \n "); 
fp=fopen(filename,"r"); 
while(fgets(recvline,80,fp)!=NULL) 
{ 
printf("\n %s\n ",recvline); 
} 
fclose(fp); 
} 

/client.c

#include<stdio.h> 
#include<string.h> 
#include<stdlib.h> 
#include<sys/types.h> 
#include<sys/socket.h> 
#include<netinet/in.h> 
#include<unistd.h> 
#include <arpa/inet.h> 
#define SERV_PORT 6349 
int main(int argc,char **argv) 
{ 
char filename[80]; 
int sockfd; 
struct sockaddr_in servaddr; 
sockfd=socket(AF_INET,SOCK_DGRAM,0); 
bzero(&servaddr,sizeof(servaddr)); 
servaddr.sin_family=AF_INET; 
servaddr.sin_port=htons(SERV_PORT); 
inet_pton(AF_INET,argv[1],&servaddr.sin_addr); 
printf("enter the file name"); 
scanf("%s",filename); 
sendto(sockfd,filename,strlen(filename),0,(struct sockaddr*)&servaddr,sizeof(servaddr)); 
} 
+0

soran önce argv için komut satırına bir argüman içermiyordu tahmin ediyorum En azından bazı basit hata ayıklamalarını kendiniz yapmanız beklenir. Bir hata ayıklayıcı ve/veya hata ayıklama yazdırma ifadeleri kullanın. Ve her bir fonksiyon çağrısı için temel hata kontrolünü yapın. – kaylum

+0

istemci koduna bir argüman ilettiğinizden emin misiniz (yani, 'argv [1]' var?) – yano

+0

diğer hatalar arasında, strlen (filename) karakterlerini sonlandırmayı içermeyen karakterler gönderiyorsunuz 0 . –

cevap