-2
"C"でファイルを転送するためのUDPクライアントサーバーのコードを記述しました。クライアントとサーバーの両方がエラーなしでコンパイルされます。しかし、実行中のクライアントでは、実行時エラー "セグメンテーション・フォルト(コア・ダンプ)"が表示されます。任意のソリューション??ファイルを転送するudpクライアントサーバープログラムのセグメンテーションフォルト(コアダンプ)
私のコード:
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));
}
尋ねる前に、あなたはARGVのためのコマンドラインで引数が含まれていませんでした推測していますあなた自身で少なくともいくつかの基本的なデバッグを行うことが期待されます。デバッガを使用するか、またはprintステートメントをデバッグします。各関数呼び出しの基本的なエラーチェックを行います。 – kaylum
クライアントコードに引数を渡してもよろしいですか(つまり、argv [1] 'が存在しますか?) – yano
他のエラーの中では、終端の0を含まない' strlen(filename) 。 –