towadのプロフィール

@towad towad
ありがとう数9
質問数0
回答数11
ベストアンサー数
4
ベストアンサー率
80%
お礼率
0%

  • 登録日2009/12/22
  • VC6.0ソケット通信プログラムについて

    お世話になります。 VC6.0でソケット通信の社内の既存のプログラムを改善しております。 クライアントより、サーバにソケットで大量に電文を送信した時に、サーバ側の処理が重くなってしまいます。 NETSTATコマンドで確認したところ、 サーバ側では、CLOSE_WAITが大量に出力されており クライアント側では、FIN_WAIT_2が大量に出力されます。 クライアント側のFIN_WAIT_2は、時間が経つと消えるのですが、サーバ側のCLOSE_WAITは残ってしまっております。 サーバ側のEXEを再起動すると、CLOSE_WAITは消えます。 サーバ側のソケットの受信後の処理に問題があるのではと考えておりますが、何処が問題なのかわからない状態です。 コードを以下に記述致します。 WINAPI K010cListener{ /*Winsock初期化*/ WSAStartup(wVersionRequested,&wsaData); /*SOCKET作成*/ fd = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP) /*ポートの設定*/ addr.sin_addr.s_addr = htonl(INADDR_ANY); addr.sin_family = AF_INET; addr.sin_port = htons(usPortNo); addrlen = sizeof(addr); /*BIND*/ bind(fd,(struct sockaddr*)&addr,addrlen) /*LISTEN*/ listen(fd,0) while(1){ /*ACCEPT*/ fd2 = accept(fd,(struct sockaddr*)&addr,&addrlen) //データ受信 waitReceiveThread(fd2, &rcv_msg); //DBオープン ConnectDB() //DB登録 AddTable(&rcv_msg) //DBクローズ CloseDB() } /*Winsock終了*/ WSACleanup(); } void waitReceiveThread(SOCKET fd, SockRcvMsg *rcv_msg) { while (1) { /*データ受信待ち*/ rcvSize = recv(fd,rcvBuf,sizeof(rcvBuf),0); if (rcvSize <= 0) { continue; } else { /* 返信電文の準備 */ memset(sndBuf,0x20,sizeof(sndBuf)); memcpy(sndBuf ,"RCMORDER00004800000000",22); /* 返信電文の送信 */ send(fd,(char*)sndBuf,sizeof(sndBuf),0); /* バッファの初期化 */ bufsize=0; memset(buf,'\0',sizeof(buf)); break; /*ループを抜ける*/ } } } 恐れ入りますが、ご教授いただければ幸いです。 宜しくお願い申し上げます。

    • ベストアンサー
    • noname#164045
    • C・C++・C#
    • 回答数1
  • VC 2008 C# 複数プロジェクトの連携

    同一ソリューションになる複数プロジェクトで連携する方法を教えてください。 調べるためのヒントをいただければと思います。 プロジェクトが A,B,C と三つ作成予定です。 A,B,C 単体で利用できるプログラムとして作成します。 また B,C は A から呼び出しされる形で起動させる場合があります。 その際に A は B,C に必要な情報を渡します。 B,C で作業を完了すると A に結果を返します。 以上のことをやりたいと思っています。 今の知識でやろうとすると、A,B,C 単体で動かすのはそのままでOK。 B,CがAからの呼び出しかどうかを、起動時の引数などで判断。 呼び出し軌道の場合は、引き渡す情報を一時ファイルでやりとりする。 という形になりそうです。 基本的に A から B,C を呼び出した時点で制御はB,Cに移行してAでは作業できないようにしたいと思っています。 一時ファイルで作成するのもよいのですが、プロジェクト内で別なフォームを呼び出すような感じで処理できないか調べているところです。 どのような情報を調べていけばよいかよろしくお願いします。

  • VC 2008 C# 複数プロジェクトの連携

    同一ソリューションになる複数プロジェクトで連携する方法を教えてください。 調べるためのヒントをいただければと思います。 プロジェクトが A,B,C と三つ作成予定です。 A,B,C 単体で利用できるプログラムとして作成します。 また B,C は A から呼び出しされる形で起動させる場合があります。 その際に A は B,C に必要な情報を渡します。 B,C で作業を完了すると A に結果を返します。 以上のことをやりたいと思っています。 今の知識でやろうとすると、A,B,C 単体で動かすのはそのままでOK。 B,CがAからの呼び出しかどうかを、起動時の引数などで判断。 呼び出し軌道の場合は、引き渡す情報を一時ファイルでやりとりする。 という形になりそうです。 基本的に A から B,C を呼び出した時点で制御はB,Cに移行してAでは作業できないようにしたいと思っています。 一時ファイルで作成するのもよいのですが、プロジェクト内で別なフォームを呼び出すような感じで処理できないか調べているところです。 どのような情報を調べていけばよいかよろしくお願いします。

  • [C#]別フォームとの連動について

    Visual C# 2008 を使っています。 子フォームのテキストボックスに書かれた内容を、子フォーム上のボタンを押すことで、親フォームのリストボックスに追加する。 といったプログラムを作成しているところです。 しかし、子フォーム上のボタンのクリックイベントハンドラの中に、 親フォームのリストボックスへ内容を追加するプログラムを書くと、「現在のコンテキスト内には存在しません」とエラーが出てきます。 試してみたことは ・子フォームのコントロールをprivateからpublicに変えた ・子フォーム内から親フォームを参照するためのポインタを指定 ・子フォームの定義部に親フォーム参照のためのポインタを指定 です。 誰か解決策を教えていただけないでしょうか? よろしくお願いします。

  • [C#]別フォームとの連動について

    Visual C# 2008 を使っています。 子フォームのテキストボックスに書かれた内容を、子フォーム上のボタンを押すことで、親フォームのリストボックスに追加する。 といったプログラムを作成しているところです。 しかし、子フォーム上のボタンのクリックイベントハンドラの中に、 親フォームのリストボックスへ内容を追加するプログラムを書くと、「現在のコンテキスト内には存在しません」とエラーが出てきます。 試してみたことは ・子フォームのコントロールをprivateからpublicに変えた ・子フォーム内から親フォームを参照するためのポインタを指定 ・子フォームの定義部に親フォーム参照のためのポインタを指定 です。 誰か解決策を教えていただけないでしょうか? よろしくお願いします。