• ベストアンサー

TCP/IPでのgetsockname()の使い方を教えてください

タイトル通りです。UNIX Solarisで環境はgccです。 クライアント側でクライアント自身のIPアドレスとポート番号が知りたいのですが getsockname()を使うと意味不明のエラーが出ます: (xxxxx) gcc -o tcpc TCPEchoClient.c dwe.c -lsocket -lnsl Undefined first referenced symbol in file error /var/tmp//ccQLXX4R.o ld: fatal: Symbol referencing errors. No output written to tcpc collect2: ld returned 1 exit status 以下が関連しているだろう部分の抜粋です。 if ((sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0) DieWithError("socket() failed"); struct sockaddr_in sin; int len; // u_long local_ip; unsigned long local_ip; len = sizeof(sin); if (getsockname(sock, (struct sockaddr *)&sin, &len) < 0){ error("getsockname failed.\n"); } local_ip = ntohl(sin.sin_addr.s_addr); printf("PORT %d,%d,%d,%d,%d,%d\n", (int)(local_ip >> 24) & 0xff, (int)(local_ip >> 16) & 0xff, (int)(local_ip >> 8) & 0xff, (int)(local_ip) & 0xff, (ntohs(echoServAddr.sin_port) >> 8) & 0xff, ntohs(echoServAddr.sin_port) & 0xff); どこがおかしいか判りますか? 必要であれば全体のコードも補足します(そんなに長くないです)。 ちなみにここ↓を参考にしました。 http://www.coins.tsukuba.ac.jp/~syspro/2005/No8.html

  • sucker
  • お礼率91% (213/234)

質問者が選んだベストアンサー

  • ベストアンサー
  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.4

>どこか怪しいところはありますか? >if (getsockname(sock, (struct sockaddr *)&sin, &len) < 0){//←sockでいいですか? error("getsockname failed.\n"); } >local_ip = ntohl(sin.sin_addr.s_addr); >printf("PORT %d,%d,%d,%d,%d,%d\n", >(int)(local_ip >> 24) & 0xff, >(int)(local_ip >> 16) & 0xff, >(int)(local_ip >> 8) & 0xff, >(int)(local_ip) & 0xff, >(ntohs(echoServAddr.sin_port) >> 8) & 0xff, >ntohs(echoServAddr.sin_port) & 0xff); この部分を if (connect(sock, (struct sockaddr *) &echoServAddr, sizeof(echoServAddr)) < 0) DieWithError("connect() failed"); の後に移動してください。 connectが成功して初めて、ソケットとIPアドレス&ポート番号が関係づけられるはずです。

sucker
質問者

お礼

大変ありがとうございます! お陰様で解決しました。 仰った通りに例の部分を移動しましたら こんな風に表示されました: クライアント側 (lefanu) tcpc 127.0.0.1 "Echo!" 29995 PORT 127,0,0,1,157,196 Received: Echo! サーバー側 Handling client: IP address = 127.0.0.1 Handling client: Port Number = 40388 with child process: 27895 で、IPアドレスは正しいとして ポート番号が157,196 (!?)と思っていたんですが コードを読むと8ビットのシフトがされており Calcで二進数に直して合わせてみると見事、 157 = 10011101 196 = 11000100 1001110111000100 = 40388 (!) となりました。ですから printf("PORT %d,%d,%d,%d,%d\n", (int)(local_ip >> 24) & 0xff, (int)(local_ip >> 16) & 0xff, (int)(local_ip >> 8) & 0xff, (int)(local_ip) & 0xff, ntohs(sin.sin_port)); //←変更部分 と書き替えました。 なるほど、getsockname()はconnect()が成功した後に使うべきなんですね。 勉強になりました。ずーっと悩んでいたんで助かりました。 質問してよかったです。 本当にありがとうございました!

その他の回答 (3)

  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.3

>if (getsockname(sock, (struct sockaddr *)&sin, &len) < 0){ >error("getsockname failed.\n"); >} の error が未定義です。 これを  DieWithError("getsockname failed.\n"); に変えてください。

sucker
質問者

お礼

ありがとうございます! はい、DieWithError("getsockname failed.\n");に変えたらコンパイルできました! しかし、返ってきたポート番号が以下のようになりました。 (mort) tcpc 127.0.0.1 "Echo!" 29995 PORT 255,255,255,255,0,0 Received: Echo! 255なんて出るので何か読んでるのは確かでしょうけど サーバーのaccept()が読んだクライアントの情報によると (mort) tcps 29995 Handling client: IP address = 127.0.0.1 Handling client: Port Number = 40069 with child process: 20911 です。どこか怪しいところはありますか? ちゃんと読まれているか調べる方法はないものでしょうか? ちなみにサーバーは例によって http://books.elsevier.com/us//mk/us/subindex.asp?maintarget=companions/defaultindividual.asp&isbn=1558608265&country=United+States&srccode=&ref=&subcode=&head=&pdf=&basiccode=&txtSearch=&SearchField=&operator=&order=&community=mk の Example code from the text の下の TCPEchoServer-Fork.c (without SIGCHLD)です。 ※コンパイルエラーを解決してくださったので どちらにしてもポイントを差し上げます。

  • t_nojiri
  • ベストアンサー率28% (595/2071)
回答No.2

sockは、socket() で作成したディスクリプター(descriptor)の筈なので間違いないと思います。 コンパイラから出てるメッセージが >Undefined first referenced symbol in file って事で、externとかでDieWithError()を宣言するか 1ファイルにまとめたら案外解決しそうな気がします・・・。

sucker
質問者

お礼

ありがとうございます。 #3さんのお礼にも書きましたがコンパイルエラーは解決しました。 しかし、肝心の正しいIPアドレスとポート番号はまだ得られていません。 何かお気付きの点はありますか?

  • t_nojiri
  • ベストアンサー率28% (595/2071)
回答No.1

ソースは、2つコンパイルかけてるんですか? >gcc -o tcpc TCPEchoClient.c dwe.c makefile作ってコンパイルとリンク分けた方がいいですよ。 まず、どのファイルがエラーになってるか判らない気がします。

sucker
質問者

お礼

struct sockaddr_in sin; int len; unsigned long local_ip; len = sizeof(sin); if (getsockname(sock, (struct sockaddr *)&sin, &len) < 0){//←sockでいいですか? error("getsockname failed.\n"); } local_ip = ntohl(sin.sin_addr.s_addr); printf("PORT %d,%d,%d,%d,%d,%d\n", (int)(local_ip >> 24) & 0xff, (int)(local_ip >> 16) & 0xff, (int)(local_ip >> 8) & 0xff, (int)(local_ip) & 0xff, (ntohs(echoServAddr.sin_port) >> 8) & 0xff, ntohs(echoServAddr.sin_port) & 0xff); memset(&echoServAddr, 0, sizeof(echoServAddr)); echoServAddr.sin_family = AF_INET; echoServAddr.sin_addr.s_addr = inet_addr(servIP); echoServAddr.sin_port = htons(echoServPort); if (connect(sock, (struct sockaddr *) &echoServAddr, sizeof(echoServAddr)) < 0) DieWithError("connect() failed"); echoStringLen = strlen(echoString); if (send(sock, echoString, echoStringLen, 0) != echoStringLen) DieWithError("send() sent a different number of bytes than expected"); totalBytesRcvd = 0; printf("Received: "); while (totalBytesRcvd < echoStringLen) { if ((bytesRcvd = recv(sock, echoBuffer, RCVBUFSIZE - 1, 0)) <= 0) DieWithError("recv() failed or connection closed prematurely"); totalBytesRcvd += bytesRcvd; echoBuffer[bytesRcvd] = '\0'; printf(echoBuffer); } printf("\n"); close(sock); exit(0); }

sucker
質問者

補足

ありがとうございます(と補足に書いてしまいます)。 はい、二つコンパイルかけてます。 でもdwe.cにエラーがある可能性は0です。なんてったって #include <stdio.h> /* for perror() */ #include <stdlib.h> /* for exit() */ void DieWithError(char *errorMessage){ perror(errorMessage); exit(1); } //だけですから。(笑) では、全体のコードを。 元のコードは http://books.elsevier.com/us//mk/us/subindex.asp?maintarget=companions/defaultindividual.asp&isbn=1558608265&country=United+States&srccode=&ref=&subcode=&head=&pdf=&basiccode=&txtSearch=&SearchField=&operator=&order=&community=mk のTCPEchoClient.cです。 #include <stdio.h> /* for printf() and fprintf() */ #include <sys/socket.h> /* for socket(), connect(), send(), and recv() */ #include <arpa/inet.h> /* for sockaddr_in and inet_addr() */ #include <stdlib.h> /* for atoi() and exit() */ #include <string.h> /* for memset() */ #include <unistd.h> /* for close() */ #define RCVBUFSIZE 32 /* Size of receive buffer */ void DieWithError(char *errorMessage); /* Error handling function */ int main(int argc, char *argv[]) { int sock; /* Socket descriptor */ struct sockaddr_in echoServAddr; /* Echo server address */ unsigned short echoServPort; /* Echo server port */ char *servIP; /* Server IP address (dotted quad) */ char *echoString; /* String to send to echo server */ char echoBuffer[RCVBUFSIZE]; /* Buffer for echo string */ unsigned int echoStringLen; /* Length of string to echo */ int bytesRcvd, totalBytesRcvd; /* Bytes read in single recv() and total bytes read */ if ((argc < 3) || (argc > 4)) /* Test for correct number of arguments */ { fprintf(stderr, "Usage: %s <Server IP> <Echo Word> [<Echo Port>]\n", argv[0]); exit(1); } servIP = argv[1]; /* First arg: server IP address (dotted quad) */ echoString = argv[2]; /* Second arg: string to echo */ if (argc == 4) echoServPort = atoi(argv[3]); /* Use given port, if any */ else echoServPort = 7; /* 7 is the well-known port for the echo service */ /* Create a reliable, stream socket using TCP */ if ((sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0) DieWithError("socket() failed"); //↓続く

関連するQ&A

  • UDP通信について

    UDP通信で困っています。 TCP/IP通信はすぐにうまくいったのですが、 UDPの簡単なサンプルがちゃんと動きません。 間違いがあればご指摘ください。 よろしくお願いします。 (クライアント側ソース int sock; struct sockaddr_in din; memset(&din, 0, sizeof(din)); din.sin_port = htons(50050); din.sin_family = AF_INET; din.sin_addr.s_addr = inet_addr("サーバーIP"); sock = socket(AF_INET, SOCK_DGRAM, 0); int buf = 12345; sendto(sock,(char*)&buf,sizeof(int),0,(struct sockaddr*)&din,sizeof(struct sockaddr_in)); (サーバー側ソース int sock; struct sockaddr_in sin; sock = socket(AF_INET, SOCK_DGRAM, 0); memset(&sin, 0, sizeof(sin)); sin.sin_family = AF_INET; sin.sin_port = htons(50050); sin.sin_addr.s_addr = htonl(INADDR_ANY); if(bind(sock, (struct sockaddr *) &sin, sizeof(sin)) < 0) { return(1); } struct sockaddr_in fromaddr; socklen_t len = sizeof(struct sockaddr_in); int buf; recvfrom(sock,(char*)&buf,sizeof(int),0,(struct sockaddr*)&fromaddr,&len); printf("recv:%d\n",buf);

  • winsockを使った通信方法

    送信側 #include <winsock2.h> #include <string.h> int main() { WSAData wsaData; SOCKET sock; struct sockaddr_in addr; int len; typedef struct recv { char Name[32]; int Flag; } RECV; RECV send; WSAStartup(MAKEWORD(2,0), &wsaData); sock = socket(AF_INET, SOCK_DGRAM, 0); addr.sin_family = AF_INET; addr.sin_port = htons(12345); addr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1"); strcat(send.Name, "ABC"); send.Flag=12; len=sizeof(send); sendto(sock,(char *)&send,len, 0, (struct sockaddr *)&addr, sizeof(addr)); closesocket(sock); WSACleanup(); system("pause"); return 0; } 受信側 #include <stdio.h> #include <winsock2.h> #include <string.h> int main() { typedef struct rcv { char Name[32]; int Flag; } RECV; WSAData wsaData; SOCKET sock; struct sockaddr_in addr; int len; RECV rcv; WSAStartup(MAKEWORD(2,0), &wsaData); sock = socket(AF_INET, SOCK_DGRAM, 0); addr.sin_family = AF_INET; addr.sin_port = htons(12345); addr.sin_addr.S_un.S_addr = INADDR_ANY; bind(sock, (struct sockaddr *)&addr, sizeof(addr)); len=sizeof(rcv); recv(sock,(char *)&rcv, len, 0); printf("%s [%d]\n",rcv.Name,rcv.Flag); closesocket(sock); WSACleanup(); system("pause"); return 0; } winsockを使ったUDP通信プログラムで構造体データを送る事が出来ないのですが どこに誤りがあるのでしょうか? コンパイルは通ってるのですが、送信側を起動しても受信側で受け取ることが出来ていない状況です。

  • Cプログラム UDP送信の送信データに関して

    以下の2つのプログラムでの質問なのですが、 #include <winsock2.h> #pragma comment(lib,"ws2_32.lib") int main() { WSADATA wsaData; SOCKET sock; struct sockaddr_in addr; WSAStartup(MAKEWORD(2, 0), &wsaData); sock = socket(AF_INET, SOCK_DGRAM, 0); addr.sin_family = AF_INET; addr.sin_port = htons(3054); addr.sin_addr.S_un.S_addr = inet_addr("192.168.0.3 "); sendto(sock, "\x42\42\0\0\0\0\2\0\1\2\x44\x33\5", 13, 0, (struct sockaddr *)&addr, sizeof(addr)); closesocket(sock); WSACleanup(); return 0; } と #include <winsock2.h> #pragma comment(lib,"ws2_32.lib") int main() { WSADATA wsaData; SOCKET sock; struct sockaddr_in addr; WSAStartup(MAKEWORD(2, 0), &wsaData); sock = socket(AF_INET, SOCK_DGRAM, 0); addr.sin_family = AF_INET; addr.sin_port = htons(3054); addr.sin_addr.S_un.S_addr = inet_addr("192.168.0.3 "); sendto(sock, "HELLO", 5, 0, (struct sockaddr *)&addr, sizeof(addr)); closesocket(sock); WSACleanup(); return 0; } について、送信データ部分に「¥」入ることによって、送信プロセスでどのような処理がなされているのですか? ¥~¥までで1バイトということで処理してくださいね、と処理系?に指示しているのですか? また、「¥」はC言語ならではの表記の仕方なのですか?少し、伝えるのが難しいですが、何でもいいのでご回答頂けませんか?宜しくお願いします。

  • UNIXでのTCP/IP

    クライアントとサーバの通信をするプログラムを作っているのですが gethostbyaddr()でホスト名を得てそれをprintf()からホスト名を表示させたいのです。 //サーバ側 #define MAXPENDING 5 void DieWithError(char *errorMessage); void HandleTCPClient(int clntSocket); char * ResolveAddr(unsigned long addr) { struct hostent *host; host = gethostbyaddr((char *)&addr, sizeof(addr),AF_INET); if (host == NULL) { fprintf(stderr, "gethostbyaddr() failed"); exit(1); } return host->h_name; } int main(int argc, char *argv[]) { int servSock; int clntSock; struct hostent *host; struct sockaddr_in echoServAddr; struct sockaddr_in echoClntAddr; unsigned short echoServPort; unsigned int clntLen; if(argc != 2) { fprintf(stderr, "Usage: %s <Server Port>\n", argv[0]); exit(1); } echoServPort = atoi(argv[1]); if((servSock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP))<0) DieWithError("socket() failed"); memset(&echoServAddr, 0, sizeof(echoServAddr)); echoServAddr.sin_family = AF_INET; echoServAddr.sin_addr.s_addr = htonl(INADDR_ANY); echoServAddr.sin_port = htons(echoServPort); if(bind(servSock, (struct sockaddr *) &echoServAddr, sizeof(echoServAddr))<0) DieWithError("bind() failed"); if(listen(servSock, MAXPENDING)<0) DieWithError("listen() failed"); for (;;) { clntLen = sizeof(echoClntAddr); if((clntSock = accept(servSock, (struct sockaddr *) &echoClntAddr,&clntLen))<0) DieWithError("accept() failed"); ResolveAddr(echoClntAddr.sin_addr.s_addr); printf("Handling client %s\n", host->h_name); HandleTCPClient(clntSock); } } コンパイルするとクライアントからIPアドレスを渡した際にセグメンテーション違反になるのですがどこが間違っているのか分かりません。

  • TCP/IP通信型電話番号検索プログラムを作りたいです。

    TCP/IP通信型電話番号検索プログラムを作りたいです。 クライアントは以下のようで大丈夫みたいなのですが、サーバの方を修正しなければなりません。 この質問で「TCP/IP通信型大文字・小文字変換プログラム」を発見しました。 サーバー側プログラム #include <stdio.h> #include <stdlib.h> #include <ctype.h> #include <unistd.h> #include <sys/socket.h> #include <arpa/inet.h> #define SOCK_NAME "./socket" int main() { int i; int fd1, fd2; struct sockaddr_in saddr; struct sockaddr_in caddr; int len; int ret; char buf[1024]; if((fd1 =socket(AF_INET, SOCK_STREAM, 0)) < 0 ){ perror("socket"); exit(1); } memset((char *)&saddr, 0, sizeof(saddr)); saddr.sin_family = AF_INET; saddr.sin_addr.s_addr=INADDR_ANY; saddr.sin_port=htons(1357); unlink(SOCK_NAME); if(bind(fd1, (struct sockaddr *)&saddr, sizeof(saddr)) < 0) { perror("bind"); exit(1); } if(listen(fd1,5) < 0 ) { perror("listen"); exit(1); } while(1){ len = sizeof(caddr); if((fd2 = accept(fd1, (struct sockaddr *)&caddr, &len)) < 0){ perror("accept"); exit(1); } fprintf(stderr, "Connection established: socket %d used.\n", fd2); while((ret = read(fd2, buf, 1024)) > 0 ){ fprintf(stderr, "read: &s\n", buf); for(i=0; i<ret; i++) if(islower(buf[i])) buf[i] = toupper(buf[i]); if(isupper(buf[i])) buf[i] = tolower(buf[i]); fprintf(stderr, "write: %s\n", buf); write(fd2, buf, 1024); } close(fd2); } close(fd1); return 0; } 先生によると、クライアントは同じもので良いそうです。 誰か、助けて下さい。

  • UDPでのブロードキャスト送信

    Linuxで下記UDPブロードキャスト送信プログラムを作ったのですが、sendto()関数の戻り値が-1となり エラーとなってしまうので送信できません。 何が悪いのでしょうか? ちなみにIPアドレスは192.168.0.1 サブネットマスクは255.255.0..0でやっています。 又、サブネットマスクを0.0.0.0で試してもみましたがダメでした。 #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <stdio.h> int main() { int sock; struct sockaddr_in addr; int yes = 1; sock = socket(AF_INET, SOCK_DGRAM, 0); addr.sin_family = AF_INET; addr.sin_port = htons(12345); addr.sin_addr.s_addr = inet_addr("255.255.255.255"); setsockopt(sock, SOL_SOCKET, SO_BROADCAST, (char *)&yes, sizeof(yes)); if(sendto(sock, "HELLO", 5, 0, (struct sockaddr *)&addr, sizeof(addr))!=5) printf("send error!!\n"); close(sock); return 0; }

  • C言語開発環境について

    このプログラムを実行出来るコンパイラ?あるいは開発環境を紹介して頂けませんか?出来れば無償版がいいです。よろしくお願い致します。 #include <winsock2.h> #pragma comment(lib,"ws2_32.lib") int main() { WSAData wsaData; SOCKET sock; struct sockaddr_in addr; WSAStartup(MAKEWORD(2,0), &wsaData); sock = socket(AF_INET, SOCK_DGRAM, 0); addr.sin_family = AF_INET; addr.sin_port = htons(3054); addr.sin_addr.S_un.S_addr = inet_addr("192.168.0.3"); sendto(sock, "HELLO", 5, 0, (struct sockaddr *)&addr, sizeof(addr)); closesocket(sock); WSACleanup(); return 0; }

  • TCP/IP通信型大文字・小文字変換プログラム

    TCP/IP通信型大文字・小文字変換プログラムを作りたいです。 しかし、うまく2つのプログラムが接続されません。 恐らく、IPアドレスやホスト名の問題だと思います。 超初心者でそこのところをあまり理解していません。 どなたかプログラムの補足をお願いします。 概要は ・クライアント キーボードから文字列を入力し、サーバーに送信。 サーバーから送信された文字列を画面に出力。 ・サーバー クライアントから送信された文字列に対し、 大文字は小文字に、小文字は大文字に変換して返す。 クライアント側プログラム #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/socket.h> #include <arpa/inet.h> #include <netinet/in.h> #define SOCK_NAME "./socket" int main() { struct sockaddr_in saddr; int soc; char buf[1024]; if ( (soc =socket(AF_INET, SOCK_STREAM, 0 ) ) < 0 ) { perror("socket"); exit(1); } memset((char *)&saddr, 0, sizeof(saddr)); saddr.sin_family = AF_INET; saddr.sin_addr.s_addr=inet_addr("192.168.1.1"); saddr.sin_port=htons(1357); if(connect(soc, (struct sockaddr *)&saddr, sizeof(saddr)) < 0) { perror("connect"); exit(1); } fprintf(stderr, "Connection established: socket %d used.\n", soc); while(fgets(buf, 1024, stdin)){ if(buf[strlen(buf) -1] == "\n") buf[strlen(buf) -1] = "\0"; write(soc, buf, 1024); read(soc, buf, 1024); fprintf(stdout, "%s\n", buf); } close(soc); return 0; } サーバー側プログラム #include <stdio.h> #include <stdlib.h> #include <ctype.h> #include <unistd.h> #include <sys/socket.h> #include <arpa/inet.h> #define SOCK_NAME "./socket" int main() { int i; int fd1, fd2; struct sockaddr_in saddr; struct sockaddr_in caddr; int len; int ret; char buf[1024]; if((fd1 =socket(AF_INET, SOCK_STREAM, 0)) < 0 ){ perror("socket"); exit(1); } memset((char *)&saddr, 0, sizeof(saddr)); saddr.sin_family = AF_INET; saddr.sin_addr.s_addr=INADDR_ANY; saddr.sin_port=htons(1357); unlink(SOCK_NAME); if(bind(fd1, (struct sockaddr *)&saddr, sizeof(saddr)) < 0) { perror("bind"); exit(1); } if(listen(fd1,5) < 0 ) { perror("listen"); exit(1); } while(1){ len = sizeof(caddr); if((fd2 = accept(fd1, (struct sockaddr *)&caddr, &len)) < 0){ perror("accept"); exit(1); } fprintf(stderr, "Connection established: socket %d used.\n", fd2); while((ret = read(fd2, buf, 1024)) > 0 ){ fprintf(stderr, "read: &s\n", buf); for(i=0; i<ret; i++) if(islower(buf[i])) buf[i] = toupper(buf[i]); if(isupper(buf[i])) buf[i] = tolower(buf[i]); fprintf(stderr, "write: %s\n", buf); write(fd2, buf, 1024); } close(fd2); } close(fd1); return 0; }

  • C言語エラーの解決法教えてください。

    以下のプログラムで6行目にこのようなエラー表示がでてきたのですが、どうすれば良いですか? 1 IntelliSense: 識別子 "WSAData" が定義されていません 2 IntelliSense: 識別子 "wsaData" が定義されていません #include <winsock2.h> #pragma comment(lib,"ws2_32.lib") int main() { WSAData; wsaData; SOCKET sock; struct sockaddr_in addr; WSAStartup(MAKEWORD(2,0), &wsaData); sock = socket(AF_INET, SOCK_DGRAM, 0); addr.sin_family = AF_INET; addr.sin_port = htons(9750); addr.sin_addr.S_un.S_addr = inet_addr("192.168.0.8 "); sendto(sock, "HELLO", 5, 0, (struct sockaddr *)&addr, sizeof(addr)); closesocket(sock); WSACleanup(); return 0; } 教えてください。宜しくお願いします。

  • 実行ファイルのweb掲載可否

    以下のプログラムの実行ファイルをweb上に載せることはできるのでしょうか? #include <winsock2.h> #pragma comment(lib,"ws2_32.lib") int main() { WSADATA wsaData; SOCKET sock; struct sockaddr_in addr; WSAStartup(MAKEWORD(2, 0), &wsaData); sock = socket(AF_INET, SOCK_DGRAM, 0); addr.sin_family = AF_INET; addr.sin_port = htons(3054); addr.sin_addr.S_un.S_addr = inet_addr("192.168.0.3 "); char data[] = { 0x42, 0x42, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0x02, 0x44, 0x33, 0x05 }; sendto(sock, data, 13, 0, (struct sockaddr *)&addr, sizeof(addr)); closesocket(sock); WSACleanup(); return 0; }

専門家に質問してみよう