解決済み
Posted: 2016年7月06日(水) 10:33
解決しました。ありがとうございます。
「送信できているはず」と思い込むだけでなく、きちんとパケットキャプチャなどで確認しましたか?masyumaro_sec さんが書きました:送信側はしっかり送信できているはずなのですが
受信側に(送信側にも)「recv」が見当たりません。masyumaro_sec さんが書きました:受信側のrecvで
bad file descriptorエラーが出ていることが分かりました。
3. 禁止行為について
以下の行為を禁止行為として定めます。
(中略)
[C言語何でも質問掲示板でのみ適用される事項]
名前を複数利用して質問する行為
記事の内容を無暗に変更する行為
自分勝手な都合で記事を削除する行為
#include <stdio.h>
#include <errno.h>
#include <Windows.h>
#define Port 4444
#define IPaddr "127.0.0.1"
int main(void){
FILE *fp;
SOCKET sock;
int i = 0;
int num_read = 0;
char buffer[4096];
struct sockaddr_in addr;
WSADATA wsaData;
WSAStartup(MAKEWORD(2,0), &wsaData);
sock = socket(AF_INET, SOCK_STREAM, 0);
addr.sin_family = AF_INET;
addr.sin_port = htons(Port);
addr.sin_addr.S_un.S_addr = inet_addr(IPaddr);
if (connect(sock, (struct sockaddr *)&addr, sizeof(addr)) != 0){
return -1;
}
fp = fopen("test.jpg","rb");
if(!fp){
printf(" Can't open file(test)...\n");
}
printf(" Send start.\n");
while(num_read = fread(buffer,1,sizeof(buffer),fp)){
i += 1;
printf(" count: %d\n",i);
if(write(sock,buffer,num_read) < sizeof(buffer)) break;
printf(" Sent buffer\n");
}
printf(" end\n");
fclose(fp);
closesocket(sock);
WSACleanup();
system("pause");
return 0;
}
#include <stdio.h>
#include <errno.h>
#include <Windows.h>
#define Port 4444
int main(void){
WSADATA wsaData;
SOCKET sock,sock0;
FILE *fp;
struct sockaddr_in addr;
struct sockaddr_in client;
int len;
int i = 0;
int num_read = 0;
char buffer[4096];
printf("[-] Waiting connection...");
WSAStartup(MAKEWORD(2,0), &wsaData);
sock0 = socket(AF_INET, SOCK_STREAM, 0);
addr.sin_family = AF_INET;
addr.sin_port = htons(Port);
addr.sin_addr.S_un.S_addr = INADDR_ANY;
bind(sock0, (struct sockaddr *)&addr, sizeof(addr));
listen(sock0, 5);
len = sizeof(client);
sock = accept(sock0, (struct sockaddr *)&client, &len);
printf("\n [*] Accepted connection from %s\n",inet_ntoa(client.sin_addr));
fp = fopen("cpy.jpg","wb");
if(!fp){
printf(" Can't open file(cpy)...\n");
}
printf(" Receive Start.\n");
while( num_read = read(sock,buffer,sizeof(buffer)) ){
i += 1;
printf(" count: %d\n",i);
printf(" num_read = %d\n",num_read);
fprintf(stderr, "%d %s\n", errno, strerror(errno));
if(fwrite(buffer,1,num_read,fp) < sizeof(buffer)) break;
printf(" writed file \n");
}
printf(" end\n");
fclose(fp);
closesocket(sock);
closesocket(sock0);
WSACleanup();
system("pause");
return 0;
}