現在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();
}
No.4ベストアンサー
- 回答日時:
いつパケットがきてもいいようにという目的で、
OnTimerを使うのは、そもそも発想が違うというか。
確実にタイマ指定時間毎にOnTimerが呼ばれる保証はないんじゃなかったっけか。
受信専用のスレッドを立てて、その中で、
select, recvを使うのが一般的じゃないかな。
recvはブロッキング関数なので、データが受信されない限り
抜けてくることはない。つまりスレッドが1つのアプリならば、フリーズする。
まあ、それを避けるためにselectを使って、データが到着しているか
調査するんだけどね。
データが到着していれば、recvを呼んでもデータが受信されて、関数を抜けてくるので。
No.3
- 回答日時:
select()ではなく、WSAAsyncSelect()かWSAEventSelect()を使ってみてはどうでしょう?
もしど~してもselect()でやるのならば、ioctlsocket()をsoclet()の後で呼び出す手もありますが・・・
No.2
- 回答日時:
select()またはWSAEventSelect()を使用していないので、作成したダイアグラムソケットがブロッキングモードで動作しているからではないですか?
listen()はストリームソケットで使うもので、今回は該当しないでしょう。
他にもWSAStartup()とWSACleanup()をOnTimerに入れてるなど変なところもありますが・・・
この回答への補足
早速の回答ありがとうございます。
select関数は試していたのですが、select関数でも同様に
フリーズが起きてしまっています。
デバッグしてみても、select関数の文で動作がとまってしまいます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- Visual Basic(VBA) Excel-VBAでのファイルの開き方 4 2023/02/14 11:01
- C言語・C++・C# C言語で再起関数とポインタを用いて文字列反転をする方法がわかりません。 4 2023/04/29 20:32
- C言語・C++・C# #include <stdio.h>int main(void) { int buf[100] = 6 2022/11/01 22:45
- UNIX・Linux raspberry piを使ったWebサーバー制作をしています、接続するネットワークを変更したときに 1 2023/01/09 15:57
- その他(プログラミング・Web制作) pythonのグローバル変数 2 2022/11/25 18:02
- C言語・C++・C# const char** p;のとき、free(p)でC4090エラーとなるのはなぜですか 3 2023/03/31 16:28
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- Excel(エクセル) エクセル VBA For Next 繰り返しの書き方を教えてください 6 2022/09/01 14:11
- Visual Basic(VBA) VBAの繰り返し処理について教えてください。 3 2022/08/02 13:21
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教える店舗&オフィスのセキュリティ対策術
中・小規模の店舗やオフィスのセキュリティセキュリティ対策について、プロにどう対策すべきか 何を注意すべきかを教えていただきました!
-
Winsockで接続待ちタイムアウトを設定する方法
C言語・C++・C#
-
UDP受信時の通信異常検知について
C言語・C++・C#
-
UDP通信におけるbind関数について
C言語・C++・C#
-
-
4
ソケットのrecvの戻り値が0
C言語・C++・C#
-
5
WinsockAPIのrecvfromの受信データがおかしい
Visual Basic(VBA)
-
6
socket: recvはいつ,どれだけ受け取るのか?
C言語・C++・C#
-
7
ExcelVBAでのwinsockの利用
その他(Microsoft Office)
-
8
<unistd.h>をVisualStudioでつかえるようにする
C言語・C++・C#
-
9
Socket通信の0バイト受信について
Java
-
10
パケット受信 recvfrom( )について
C言語・C++・C#
-
11
非ブロッキングソケットのrecvについて
C言語・C++・C#
-
12
コマンドプロンプトの「%1」と「%~1」の違いがわからない
その他(プログラミング・Web制作)
-
13
C言語で、メモリを解放しないで終わるプログラム
C言語・C++・C#
-
14
ソケットのクローズについて
C言語・C++・C#
-
15
ソケット通信 同じポート番号でn対1はできない?
C言語・C++・C#
-
16
FORMが開いているかどうかの確認方法
Visual Basic(VBA)
-
17
C#でほかのファイルにある自作クラスを使用したい場合
その他(プログラミング・Web制作)
-
18
WaitForSingleObjectの使い方について
C言語・C++・C#
-
19
ソケット通信で同時受信の制限?
C言語・C++・C#
-
20
C++によるファイル送受信プログラム作成について
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Winsockを使わずにVBでSocketを...
-
TCP/IP通信時のサーバーからの受信
-
VB6のwinsockでconnectできない
-
UDPを使って通信速度測定プログ...
-
ソケットのrecvの戻り値が0
-
winsockを使った通信での同時接...
-
オセロゲームのオンラインゲーム
-
MFCソケットについて
-
VC++でのソケット通信について
-
Javaプログラム同士のプロセス...
-
C#とTCP/IPを利用したサーバー...
-
Socket通信の0バイト受信について
-
エクセル VBA でのCOMポート...
-
Winsockで接続待ちタイムアウト...
-
異なる言語間でのソケット通信...
-
UdpClient 送信元のIPアドレ...
-
名前付きパイプの通信ポートに...
-
ポート番号0について
-
JavaでBASIC認証突破
-
recv関数でフリーズしてしまう
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
TCP/IP通信時のサーバーからの受信
-
エクセル VBA でのCOMポート...
-
UDP通信する時に、相手にどうや...
-
UDP通信におけるbind関数について
-
UdpClient 送信元のIPアドレ...
-
Winsockで接続待ちタイムアウト...
-
recv関数でフリーズしてしまう
-
ソケットのクローズについて
-
ソケットのrecvの戻り値が0
-
Socket通信の0バイト受信について
-
ソケット通信 同じポート番号...
-
相手のIPアドレスを取得する方法
-
ソケットでクライアントのipア...
-
VB6のwinsockでconnectできない
-
Connectエラーが出てしまう・・...
-
ソケット通信の送受信遅延-02 ...
-
同じLAN内パソコンのIPアドレス...
-
WinSockでの通信プログラムがう...
-
UDPのソケットプログラミング
-
非ブロッキングソケットのrecv...
おすすめ情報