UDP 経由でファイルを送信しようとしていますが、これは 64 > 1024 バイトを使用して送信される可能性があります。問題は、サーバーが認識するすべての部分を送信できないことです: コード サーバー:
void* sender(void* p){
pthread_mutex_lock(&mtx);
struct sockaddr_in addr;
char tString[256];
int state,
sock = *(int *)p;
socklen_t slen = sizeof(tempAddr);
addr = tempAddr;
memset(&tempAddr, 0x00, sizeof(tempAddr));
pthread_mutex_unlock(&mtx);
FILE* fd = fopen("foo.txt", "r");
int offset = 0;
while( fread(tString,1,256, fd) > 0){
if( (ferror(fd)))
ERR("!! ?? ferror");
fwrite(tString, 1, 256, stdout);
if (sendto(sock, tString, strlen(tString), 0, (struct sockaddr *) &addr, slen) < 0){
ERR("!! ?? sendto");
}
if (feof(fd)){
printf("~ EOF! ~\n");
break;
}
memset(tString,0,256);
}
fclose(fd);
pthread_exit(NULL);
}
出力例:
Received pack from 127.0.0.1:55523
Data: asd
server received datagram from localhost (127.0.0.1)
server received 3/256 bytes: asd
Old unsatiable our now but considered travelling impression. In excuse hardly summer in basket misery. By rent an part need. At wrong of of water those linen. Needed oppose seemed how all. Very mrs shed shew gave you. Oh shutters do removing reserved wandered an. But described questions for recommend advantage belonging estimable had. Pianoforte reasonable as so am inhabiting. Chatty design remark and his abroad figure but its.Affronting discretion as do is announcing. Now months esteem oppose nearer enable too six. She numerous unlocked you perceive speedily. Affixed offence spirits or ye of offices between. Real on shot it were four an as. Absolute bachelor rendered six nay you juvenile. Vanity entire an chatty to. ~ EOF!
クライアント:
FILE* fd = fopen("fooo.txt","w");
int offset = 0;
do{
if (recvfrom(sockfd, tempString, 256, 0, (struct sockaddr*)&sAddr, &slen) < 0){
ERR("!! ?? recvfrom()");
}
fwrite(tempString, 1, 256, fd);
printf("Received packet from %s:%d\nData: %s\n\n", inet_ntoa(sAddr.sin_addr), ntohs(sAddr.sin_port), tempString);
}while(fread(tempString,1,256, fd) > 0);
出力:
Enter data to send(Type exit and press enter to exit) : asd
Received packet from 127.0.0.1:1234
Data: Old unsatiable our now but considered travelling impression. In excuse hardly summer in basket misery. By rent an part need. At wrong of of water those linen. Needed oppose seemed how all. Very mrs shed shew gave you. Oh shutters do removing reserved wande
ご覧のとおり、テキストの最初の部分のみが送信されます。理由はありますか?PS: EOF は認識されますが、どういうわけか私のクライアントはテキストの一部しか取得しません...
編集:問題はこの行の周りにあると確信しています:}while(fread(tempString,1,256, fd) > 0)
クライアント内...