![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
すみません。よくわからなくなったので教えてください。
非同期処理を行いwindowprocで送信、受信の処理をしているのですが、一部わかりません。
[内容]
クライアントからデータを送信してもらい、サーバ側で受信をして、サーバ側で受信後、クライアントへ送信をしたいのですが....
[サーバ側ソース抜粋]
::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
int EventErrorCoode;
int len;
switch(message)
{
case FM_TCPPROC:
EventErrorCoode = WSAGETSELECTERROR(lParam);
switch(WSAGETSELECTEVENT(lParam)){
case FD_CONNECT:
//コネクトされたときの処理
break;
case FD_ACCEPT:
if(EventErrorCoode != 0){
NetWork_LogOut();
break;
}
// 状態判定処理
if(NetWork_Accept() == FALSE){
//失敗したときの処理
}
break;
case FD_READ:
// データの受信メッセージ
if(NetWork_Recv() == FALSE){
}
break;
case FD_WRITE:
//テスト折り返し送信
SendData = "折り返し";
strcpy(Recv_Buffer,SendData);
len = send(server_s, Recv_Buffer, strlen(Recv_Buffer),0);
break;
:
:
return CDialog::WindowProc(message, wParam, lParam);
}
::NetWork_Recv()
{
int nResult;
int len;
nResult = recv(client_s, (CHAR *)Recv_Buffer, RECV_SIZE - 1, 0);
Recv_Buffer[nResult] = '\0';
return TRUE;
}
*非同期処理はsocket作成後しています。
クライアントから送信されたデータが、FD_READで認識し、NetWork_Recv()関数を使って受信します。
その後、空になった時点で、FD_WRITEを実行すると思っていたのですが、recvされた後、データは空にならないのでしょうか?
No.1ベストアンサー
- 回答日時:
あーあ、WindowProcオーバーライドしちゃってるんだってのはおいといて(^^;;
>クライアントから送信されたデータが、FD_READで認識し、NetWork_Recv()関数を使って受信します。
>その後、空になった時点で、FD_WRITEを実行すると思っていたのですが、recvされた後、データは空にならないのでしょうか?
FD_WRITEは、「ソケットの送信バッファに空きができたことを通知」なんだから、受信の終了とは関係ないような。
クライアントへデータを投げつけ終わった(残りを投げることができる)タイミングを知るためのものだと思うんですが。
FD_CONNECTの直後、FD_READの前にFD_WRITE来てませんか?
いつもありがとうございます。
>あーあ、WindowProcオーバーライドしちゃってるんだってのはおいといて(^^;;
MFCの使い方よく知らなくて、すみません。(^^;
いろいろ事情があり、急遽VC++での開発になったので....
教えて頂いているのに、本当に申し訳ありません。
いろいろ調べてみたら、sendの使いかたが間違っていました。すみませんでした。
気が焦っていたみたいで、見落としがありました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# TCP/IP通信時のサーバーからの受信 2 2022/11/23 09:11
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) 【変更】ファイルを閉じてダイアログで保存した時、更新したシートだけの処理の実行をする 5 2022/03/26 18:31
- C言語・C++・C# カードシャッフルのブログラムを使ってc言語でブラックジャックをしたい 2 2022/04/12 15:13
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- JavaScript switch文のswitch(n)の部分を複数の値にするか、if文に変えてほしいです。 1 2022/07/27 17:18
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- JavaScript jsで、switch文で書かれた分をif文にできませんか。 1 2022/07/28 15:10
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VB2005でWin32APIを用いてRS-23...
-
シリアル通信エラー
-
winsock recvでデータの取得方法
-
RS-232Cでバイナリデータを受信...
-
exeファイルのセキュリティ。
-
Macターミナルで実行中のプログ...
-
バックグラウンドのプロセスの...
-
Java Web Start アプリケーショ...
-
プロダクションコードとは?
-
アセンブラ言語の数字を数値に...
-
エクセルVBA 時間抜けの取得
-
PIC のデータEEPROMに書き込み...
-
TCP/IP通信時のサーバーからの受信
-
動的メモリとexit(C言語)
-
【C言語 再帰・メモ化】 C言語...
-
DoEvents関数って何?
-
Windows10でDOSゲーム
-
誤ってプロセスの終了をしてし...
-
Visual C++からpingを実行して...
-
アラート可能な待機状態とは
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C# シリアル通信でデータ受信...
-
socket: recvはいつ,どれだけ...
-
WriteFile()でのデータ送信がで...
-
winsockでソケット通信の開発を...
-
UDP処理のエラーについて
-
RS232C通信(PC⇔PLC)
-
シリアル通信の出力バッファと...
-
シリアルポート通信
-
SocketのSend関数でのCLOSEの検...
-
「スイッチングハブのバッファ...
-
シリアル通信 大きいサイズの...
-
Connection reset by peer
-
WinsockAPIのrecvfromの受信デ...
-
C#で通信処理。応答がない場合...
-
rs232cでの受信データ(mscomm)...
-
ソケット通信内 read関数について
-
Linuxでのシリアル通信について...
-
バイナリデータ受信時のデータ順
-
RS-232Cでバイナリデータを受信...
-
recv関数の受信結果について
おすすめ情報