UDPで相手がいない状態でデータを送信する – プログラミング – Home

UDPで相手がいない状態でデータを送信...
 
通知
すべてクリア

UDPで相手がいない状態でデータを送信する


ロキ
 ロキ
(@ロキ)
ゲスト
結合: 19年前
投稿: 5
 

こんにちは。よろしくお願いします。

UDPでデータを送受信するプログラムを作成しました。

・送信側
 1.ソケットをオープンする(socket)。
 2.ソケットをポート番号50000でバインドする(bind)。
 3.selectを使用し、データの受信を定期的に確認する(recvfrom)。
 4.データを送信する(sendto)。

・受信側
 1.ソケットをオープンする(socket)。
 2.ソケットをポート番号50001でバインドする(bind)。
 3.selectを使用し、データの受信を定期的に確認する(recvfrom)。

送信側から受信側へデータを送信すると、もちろんデータを受信できるのですが、
受信側がいない状態で、送信側からデータを送信すると、
受信側で何らかのデータを受信したような動作をします(詳しくは下記の★の部分)。
ちなみに、受信側がいる状態ではこのような動作はしません。
この様な動作をする原因は何なのでしょうか。
ご存知の方ご教授いただけないでしょうか。m(_ _)m

int CUDPSocket::RecvFrom(char IP[], int *Port, char Data[], int *DataSize)
{
int R = SOCKET_NG;

memcpy(&_Imp->_RecvFDS[1], &_Imp->_RecvFDS[0], sizeof(_Imp->_RecvFDS[0]));

timeval TimeOut;
TimeOut.tv_sec = 0;
TimeOut.tv_usec = 1000;
select(0, &_Imp->_RecvFDS[1], NULL, NULL, &TimeOut);

if(FD_ISSET(_Imp->_Socket, &_Imp->_RecvFDS[1]))
{
sockaddr_in From;
int FromSize = sizeof(From);
int R_recvfrom = recvfrom
(_Imp->_Socket, Data, *DataSize, 0, (sockaddr *)&From, &FromSize);
★R_recvfromにはSOCKET_ERRORが格納されるが、
★FD_ISSETが成功したことから、何らかのデータを受信したような動作をする。
if(R_recvfrom != SOCKET_ERROR)
{
R = SOCKET_OK;

*DataSize = R_recvfrom;

strcpy(IP, inet_ntoa(From.sin_addr));
*Port = ntohs(From.sin_port);
}
}

return R;
}


引用解決済
トピックタグ

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました