- ベストアンサー
[Win + Eclipse + GCC]socketクライアントの作成方法
Windows XP に GCC と Eclipseをインストールしました。 過去にVisual Studio 2008 Express Editionを使用していたとき ソケットクライアントは以下のとおり実装しました。 ーーーー #include <iostream> #include <ws2tcpip.h> #pragma comment(lib,"ws2_32.lib") using namespace std; int main() { int dstSocket; struct sockaddr_in dstAddr; WSADATA data; WSAStartup(MAKEWORD(2,0), &data); // sockaddr_in 構造体のセット memset(&dstAddr, 0, sizeof(dstAddr)); dstAddr.sin_port = htons(80); dstAddr.sin_family = AF_INET; dstAddr.sin_addr.s_addr = inet_addr("127.0.0.1"); // ソケットの生成 dstSocket = socket(AF_INET, SOCK_STREAM, 0); //接続 if(connect(dstSocket, (struct sockaddr *) &dstAddr, sizeof(dstAddr))){ cout << "接続できませんでした\n" << endl; return(-1); } char buffer[1024] = "GET / HTTP/1.0\r\n\r\n"; send(dstSocket, buffer, sizeof(buffer), 0); //パケットの受信 int n = recv(dstSocket, buffer, sizeof(buffer), 0); cout << buffer << endl; // Windows でのソケットの終了 closesocket(dstSocket); WSACleanup(); return(0); } ーーーー 上記と同じ機能をGCC上で実装したいのですが、どこかに コードのサンプルがのっているWebサイトはありますか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
-mno-cygwin は?
その他の回答 (2)
- toda hiro(@hiro_knigh)
- ベストアンサー率39% (59/151)
お疲れ様です。 gccが手元にないので実証出来ていませんが、 #include <ws2tcpip.h> を extern "C"{ #include <ws2.tcpip.h> } とするとどうなりますか? また、pragma自体はgccでもサポートされているようですが、commentはgccでサポートされていないようです。 コンパイルオプション等でリンクするしかないようです。(他の方法があるのか不明) それと、同じような質問をされるのであれば、前回と同じようにどのようなエラーが出ているのか記載をしないと読む気がしなくなりますよ。
お礼
ご回答頂き感謝しております。しかし上記の対応では不可でございました。
- php504
- ベストアンサー率42% (926/2160)
optionつけてコンパイルしたらそのままできませんか g++ yourprogram.cpp -lws2_32 -mno-cygwin
お礼
駄目でした。故障でしょうか。 C:\>g++-4 test.cpp -lws2_32 In file included from /usr/lib/gcc/i686-pc-cygwin/4.3.2/../../../../include/w32a pi/ws2tcpip.h:19, from test.cpp:2: /usr/lib/gcc/i686-pc-cygwin/4.3.2/../../../../include/w32api/winsock2.h:103:2: w arning: #warning "fd_set and associated macros have been defined in sys/types. This may cause runtime problems with W32 sockets" In file included from /usr/lib/gcc/i686-pc-cygwin/4.3.2/../../../../include/w32a pi/ws2tcpip.h:19, from test.cpp:2: /usr/lib/gcc/i686-pc-cygwin/4.3.2/../../../../include/w32api/winsock2.h:635: err or: declaration of C function 'int gethostname(char*, int)' conflicts with /usr/include/sys/unistd.h:206: error: previous declaration 'int gethostname(char *, size_t)' here
お礼
cygwin上で-mno-cygwinを使用したところエラーになりました。cygwin上でcygwinのライブラリを使わないというオプションは使用できないようです。コマンドプロンプト上で-mno-cygwinを付加したところ無事コンパイルできました。ありがとうございました。ただしeclipse上で-mno-cygwinを使う方法がわかりません。makeファイルを直接編集して対応できましたがeclipse上から-mno-cygwinを使う方法は別途探してみます。