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

このQ&Aのポイント
  • CプログラムにおけるUDP送信の送信データに関して「¥」が入ることで、送信プロセスでの処理がどのようになるのかについて質問です。
  • 送信データ部分の「¥~¥までで1バイト」という指示は、処理系に対して行われている指示ですか?
  • 「¥」はC言語特有の表記方法なのでしょうか?お答え頂けると助かります。
回答を見る
  • ベストアンサー

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言語ならではの表記の仕方なのですか?少し、伝えるのが難しいですが、何でもいいのでご回答頂けませんか?宜しくお願いします。

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

  • ベストアンサー
  • hitomura
  • ベストアンサー率48% (325/664)
回答No.1

ただの文字定数の8進表記と16進表記です。 http://msdn.microsoft.com/ja-jp/library/edsza5ck.aspx

okwave127yu
質問者

お礼

そういうことですか。ありがとうございました!

関連するQ&A

  • 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; }

  • 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; } 教えてください。宜しくお願いします。

  • UDPデータ受信について

    以下でデータを送信すると、直ぐに0x42,0x42,0x00,0x00,0x00,0x00,0x82,0x00,0x01,0x44,0x33,0x00の12バイトのデータを送り返してくるのですが、これを送り返してきたら、数字の1を表示するように以下のプログラム内に書き込むことは出来ませんでしょうか?ご教授お願いします。 #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; }

  • 実行ファイルの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; }

  • 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通信プログラムで構造体データを送る事が出来ないのですが どこに誤りがあるのでしょうか? コンパイルは通ってるのですが、送信側を起動しても受信側で受け取ることが出来ていない状況です。

  • recv関数でフリーズしてしまう

    現在Winsockを用いた簡単なパケット送受信のソフトを作成しています。 開発環境はVisual Studio2008で、ダイアログベースで作成しています。 パケットの受信側の処理なんですが、いつパケットが来てもいいように、 Ontimerで、定期的に受信処理をしようと思っています。 そこでOntimer内に以下のようにプログラムしたところ、コンパイルエラー はないものの、数秒経つと応答なしとなりフリーズしてしまいます。 原因を探ったところrecv関数が原因で、recv関数をコメントアウトした ところ、フリーズはしなくなりました。また、エラー処理は省略していま すが、ソケットの作成失敗などはありませんでした。 なぜrecv関数でフリーズが起きてしまうのか、原因が分かる方は いらっしゃいますか? OnTimer(UINT nIDEvent){ WSAData wsaData; SOCKET sock; struct sockaddr_in addr; char buf[2048]; 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)); memset(buf, 0, sizeof(buf)); recv(sock, buf, sizeof(buf), 0); closesocket(sock); WSACleanup(); }

  • 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);

  • 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; }

  • 延々と受信し続けるwinsockのrecv

    以下のサーバープログラムを用いて、 (acceptしたらスレッド作成し、作成が終ったということをクライアントに知らせるために文字列送信後受信待機している) #include <winsock2.h> #include <vector> #include <process.h> #include <algorithm> char *Ver = "0.00"; using namespace std; unsigned __stdcall Patch( void *Sock ); int main() { ----WSADATA wsaData; --------WSAStartup( MAKEWORD(2,0), &wsaData ); ----SOCKET RecvSock = socket( AF_INET, SOCK_STREAM, 0 ); ----SOCKET SendSockBuf; ----vector<SOCKET> SendSock; ----fd_set ConnectFds, SubConnectFds; ----struct sockaddr_in Recv, Send; ----int len = sizeof(Send); ----Recv.sin_family = AF_INET; ----Recv.sin_port = htons(55555); ----Recv.sin_addr.S_un.S_addr = INADDR_ANY; --------bind(RecvSock, (struct sockaddr *)&Recv, sizeof(Recv) ); ----FD_ZERO( &SubConnectFds ); --------FD_SET( RecvSock, &SubConnectFds ); ----listen( RecvSock, 5 ); ----vector<unsigned int> thID; ----vector<HANDLE> hTh; ----struct timeval tv; --------tv.tv_sec = 0; --------tv.tv_usec = 0; ----while(1) ----{ --------memcpy( &ConnectFds, &SubConnectFds, sizeof(fd_set) ); --------select( 0, &ConnectFds, NULL, NULL, &tv ); --------if ( FD_ISSET(RecvSock, &ConnectFds) ) --------{ ------------SendSockBuf = accept(RecvSock, (struct sockaddr *)&Send, &len); ------------if( SendSockBuf != INVALID_SOCKET) ------------{ ----------------SendSock.push_back( SendSockBuf ); ----------------thID.push_back( hTh.size() ); ----------------hTh.push_back( (HANDLE)_beginthreadex(NULL, 0, Patch, &SendSock[hTh.size()], 0, &thID[hTh.size()]) ); ------------} --------} ----} ----closesocket(RecvSock); ----WSACleanup(); ----return 0; } unsigned __stdcall Patch( void *Sock ) { ----SOCKET *SendSock = (SOCKET *)Sock; ----send( *SendSock, Ver, 5, 0 ); ----char Str[5]; ----while( Flag == 0 ) ----{ --------recv( *SendSock, Str, 5, 0 ); ----} ----closesocket( *SendSock ); ----return 0; } 以下のようなクライアントプログラムで文字を送信すると、 #include <WinSock2.h> using namespace std; void main() { ----WSADATA wsaData; --------WSAStartup( MAKEWORD(2,0), &wsaData ); ----SOCKET Sock = socket( AF_INET, SOCK_STREAM, 0 ); ----struct sockaddr_in Addr; --------Addr.sin_family = AF_INET; --------Addr.sin_port = htons(55555); --------Addr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1"); ----connect( Sock, (struct sockaddr *)&Addr, sizeof(Addr) ); ----char str[5]; ----recv( Sock, str, 5, 0 ); ----send( Sock, "0.00", 5, 0); ----shutdown( Sock, 2 ); ----closesocket( Sock ); } クライアントプログラムは終了しているのにサーバープログラムは"0.00"を受信し続けます。 どこがおかしいのか分からないので教えてください

  • objective-c iphoneからUDP送信

    iphoneからUDPで192.168.0.3、3054ポートに0x42, 0x42, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0x02, 0x44, 0x33, 0x05の13バイトのバイナリデータを送信したいのですが、以下のソースで実行可能でしょうか?ご教授お願いします。 #import <CoreFoundation/CoreFoundation.h> #import <sys/socket.h> #import <netinet/in.h> CFSocketRef socket = CFSocketCreate(NULL, PF_INET, SOCK_DGRAM, IPPROTO_UDP, kCFSocketNoCallBack, NULL, NULL); struct sockaddr_in addr; addr.sin_len = sizeof(struct sockaddr_in); addr.sin_family = AF_INET; addr.sin_addr.s_addr = addr.sin_addr.s_addr = inet_addr(”192.168.0.3); addr.sin_port = htons(3054); CFDataRef address = CFDataCreate(NULL, (UInt8*)&addr, sizeof(struct sockaddr_in)); char* message = "\x42\42\0\0\0\0\2\0\1\2\x44\x33\5"; CFDataRef data = CFDataCreate(NULL, (UInt8*)message, strlen(message)); CFSocketSendData(socket, address, data, 3); CFRelease(socket); CFRelease(address); CFRelease(data); char*messageはおかしいですかね…。宜しくお願いします。

専門家に質問してみよう