解決済み
-
- 記事: 4
- 登録日時: 9年前
Re: C言語のソケットでbad file descriptor
「送信できているはず」と思い込むだけでなく、きちんとパケットキャプチャなどで確認しましたか?masyumaro_sec さんが書きました:送信側はしっかり送信できているはずなのですが
受信側に(送信側にも)「recv」が見当たりません。masyumaro_sec さんが書きました:受信側のrecvで
bad file descriptorエラーが出ていることが分かりました。
ここに貼られたコードは本当に実行しているものですか?
もしそうなら、「recv」とは何のことですか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
-
- 記事: 4
- 登録日時: 9年前
Re: C言語のソケットでbad file descriptor
Send,Recvに変えたことで転送に成功しました。
ありがとうございます。
ありがとうございます。
Re: 解決済み
無駄に記事を削除してはいけません。
C言語何でも質問掲示板~規約~
C言語何でも質問掲示板~規約~
3. 禁止行為について
以下の行為を禁止行為として定めます。
(中略)
[C言語何でも質問掲示板でのみ適用される事項]
名前を複数利用して質問する行為
記事の内容を無暗に変更する行為
自分勝手な都合で記事を削除する行為
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
- Dixq (管理人)
- 管理人
- 記事: 1662
- 登録日時: 14年前
- 住所: 北海道札幌市
- 連絡を取る:
Re: 解決済み
自分の都合で記事を削除するのは規約違反行為ですので、今後されないようにご注意ください。
Re: 解決済み
google検索のキャッシュに残っていたようなのでそれを基に元投稿を載せてみます。
以下、元の投稿
表題:C言語のソケットでbad file descriptor
ファイル転送プログラムをつくっていてファイルが転送できていないので
デバグプリントをしながらつくっていました。
送信側はしっかり送信できているはずなのですが受信側のrecvで
bad file descriptorエラーが出ていることが分かりました。
何処が間違っているのか分かりません。
ヒントだけでも教えて頂けるととても助かります。
コードが汚いのはご了承ください(´;ω;`)
送信側
受信側
以下、元の投稿
表題:C言語のソケットでbad file descriptor
ファイル転送プログラムをつくっていてファイルが転送できていないので
デバグプリントをしながらつくっていました。
送信側はしっかり送信できているはずなのですが受信側のrecvで
bad file descriptorエラーが出ていることが分かりました。
何処が間違っているのか分かりません。
ヒントだけでも教えて頂けるととても助かります。
コードが汚いのはご了承ください(´;ω;`)
送信側
#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;
}
Advanced Supporting Developer
無理やりこじつけ(ぉ
無理やりこじつけ(ぉ