0

送信者から受信者にテキスト ファイルを転送する 2 つの簡単なプログラムが、65536 バイト (IP パケットの最大サイズ) を超えて送信する方法を知りたいです。これは送信者です:

 FILE *fp=fopen("file_to_send.txt","r");
 char msg[65536];
 len = strlen(msg)+1;
 nwrite=0;
 printf ("write()\n");
 fflush(stdout);
 do{
   n=write(socketfd, &(msg[nwrite]), len-nwrite);
   nwrite+=n;
 }
 while( (n<0) && (errno==EINTR) );

そしてこれは受信機です:

#define MAXSIZE 65536
.....
char buf[MAXSIZE];
nread=0;
do{ 
  n=read(socketfd, &(buf[nread]), MAXSIZE ) ;
  fflush(stdout);
  nread+=n;
}while( (n<0) && (errno==EINTR) );

file_to_send の重みが 65536 未満の場合は機能しますが、それより大きい場合はテキストの一部が失われます。私の悪い英語でごめんなさい。

4

2 に答える 2

0

コントロールに問題がありwhileます。

関数writeが成功すると、値が返さgreater than 0れ、最初の書き込み後にループが終了します。

大まかに、この行を変更する必要があります

 while( (n<0) && (errno==EINTR) );

 while( n>0 || error==EINTR );

...read側面も同様

于 2013-04-19T10:16:20.680 に答える