Linux サーバー クライアントから Linux ソケット クライアントに .txt ファイルを送信しようとしています (ループバック インターフェイスを使用しています)。「OK」などの文字列を送信しようとしましたが、すべてうまくいきましたが、ファイルを送信しようとすると、クライアントが奇妙な出力を出力します。明らかに、ソケット、接続、受け入れ、リッスンなどの前のすべての手順を実行しました。
これはサーバー側のコードです:
printf("Sending file\n);
if ((fp=fopen(filename, "r"))!=NULL){
while ( (nbytes = fread(sendline, sizeof(char), 512, fp) > 0)){
printf("%s\n",sendline);
sent = writen(clientfd, sendline, nbytes);
}
close(fp);
}else
perror("Open file");
「書き込み」機能は次のとおりです。
ssize_t writen(int fd, const void *vptr, size_t n){
/* Write "n" bytes to a descriptor. */
size_t nleft;
ssize_t nwritten;
const char *ptr;
ptr = vptr;
nleft = n;
while (nleft > 0) {
if ( (nwritten = write(fd, ptr, nleft)) <= 0) {
if (nwritten < 0 && errno == EINTR)
nwritten = 0; /* and call write() again */
else
return(-1); /* error */
}
nleft -= nwritten;
ptr += nwritten;
}
return(n);
}
クライアント側のコードは次のとおりです。
while (fgets(sendline, 10000,stdin) != NULL)
{
sendto(sockfd,sendline,strlen(sendline),0,
(struct sockaddr *)&servaddr,sizeof(servaddr));
read(sockfd,recvline,10000);
fputs(recvline,stdout);
recvline[n]=0;
if((recvline[0]=='-')&&(recvline[1]=='E')&&(recvline[2]=='R')&&(recvline[3]=='R')){
close(sockfd);
exit(1);
}
}
私が手に入れた奇妙なクライアントはイメージにあります。 クライアント出力
それで、私の間違いは何ですか?このような出力が表示されるのはなぜですか?どうすれば修正できますか?