- - PR -
WinsockによるUDPプログラミング(送信受信プログラム)
1
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-09-30 17:34
こんばんわ。
A→B→C端末と言う風に、 A端末:B端末へ1024Byteずつ送信。 B端末:A端末からのパケットを受信し、C端末へ向けて送信。 C端末:B端末からのパケットを受信。 と、Winsockを用いてC言語でプログラミングを行なっています。 以下にB端末の送信・受信プログラムを示します。 以下のプログラムは、A端末からの1024Byteずつ送信されてくる、パケットをwhileループ内のrecvfrom関数で受信(recv_Buf[1025]内に格納)し、memcpyにて受信した1024Byte分のデータをrecv_Buff[1025]にコピーを行い、UDPSend関数内のsendtoにて、C端末へ向けて送信しています。 while (1) { SOCKADDR_IN from; int fromlen; int size; char recv_Buf[1025],recv_Buff[1025]; fromlen = (int)sizeof(from); //(1) size = recvfrom(s2, recv_Buf, (int)sizeof(recv_Buf) - 1, 0, (SOCKADDR *)&from, &fromlen); if (size == SOCKET_ERROR) { //(2) perror("recvエラーです\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n"); closesocket(s2); WSACleanup(); return -3; } //recv_Buff内を初期化 memset(recv_Buff,0,sizeof(recv_Buff)); //recv_Bufをrecv_Buffにコピー memcpy(recv_Buff,recv_Buf,size); UDPSend(portNo,szServer,recv_Buff); } int UDPSend(unsigned short portNo,char *szServer,char *recv_Buff) { sendto(s1, recv_Buff, (int)strlen(recv_Buff), 0, (LPSOCKADDR)&addrin1, sizeof(addrin1)); } [質問内容] C端末においてパケットを受信する際、receiveエラーが発生してしまいます。 おそらく、B端末における送信・受信プログラムがうまく動作していないと考えています。 C端末も受信を行なうので上記プログラムとほぼ同じです。コメント(2)で示した「recvエラーです」が表示され、 パケットを受信することができません。 そこで、デバックを行なったところ、B端末においてコメント(1)のsizeの返り値は1024ですが、C端末では4が返り値でした。 (recvfrom関数は、成功したら受信したバイト数が返され、失敗したときは、SOCKET_ERRORが返されます。) 上記の記述内容で、受信した1024Byteを送信できているのでしょうか? よろしくお願いします。 | ||||||||||||
|
投稿日時: 2006-09-30 21:48
[quote]
ばーどさんの書き込み (2006-09-30 17:34) より:
本当に1024byte送信しているんですね? まさかstrlen(recv_Buff)が4を返しているなんて落ちは無いよね。
せめてエラーコードくらいは確認する。
パケットモニターを併用する事を強く推奨。そうすれば憶測の入る余地は無い。 受信が旨く動いているのかは受信したデータを見れば一目瞭然だし、送信に問題が無いかはパケットモニターで見れば一目瞭然。 |
1