• ベストアンサー

winsockでソケット通信の開発をしていますが、

winsockでソケット通信の開発をしていますが、 send()を5回実行したところで10053のエラーが起きてしまいます。 必ず同じところでエラーになってしまうのですが、 同じ症状になってしまった方いらっしゃられないでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • Wr5
  • ベストアンサー率53% (2177/4070)
回答No.2

>クライアントから接続し、サーバでacceptした後、 > クライアントからsend()→サーバでrecv() > サーバからsend()→クライアントでrecv() >を繰返しており、 recv()しているならばバッファがあふれている…とは思えませんが…… ちなみに送信側で1回send()したからといって、受信側で同じサイズを指定したrecv()で受信できるとは限らない。 という辺り大丈夫…ですよね? # プロトコルによってはsend()に間隔が開くのでそのまま流れるコトもあるかも知れませんが…。 # 実際のところはTCP/IPスタックなどによる…でしょう。 >不正終了したとかを疑うべきなのでしょうか? クライアント側が…ということならば、確認してみるべきかと。 あとは…パケットキャプチャソフトなどで双方のやりとりを確認してみるとか…でしょうか。 wiresharkやtcpdumpで…。 >直前にselectして書き込み可能な状態なのを確認しているのですが、 >それでも10053のエラーが起きてしまいます。 select()で確認できるのは…自分の方の送信バッファに空きがあるか… ということではないかと。 バッファから相手に送る際に接続が切れたりすると、応答がなくなりますからエラーになるかと思われます。 # その際のエラーコードが10053かは不明ですが…。

monokono
質問者

お礼

抽象的な質問に答えてくださりありがとうございました。 おかげさまで問題を解決することが出来ました。

monokono
質問者

補足

>recv()しているならばバッファがあふれている…とは思えませんが…… すみません。バッファがあふれているようでした。 char aaa[1000]; char memset(aaa,0x00,sizeof(aaa)); strcpy(aaa,"hogehoge"); として、sendのところで send(sock, aaa, sizeof(aaa)); で呼び出しているんですが、 なぜか5回目のところで1000バイトを送ってしまっていたようです。 受信側に1000バイトの受信能力がなかったためエラーになっているようでした。

その他の回答 (1)

  • Wr5
  • ベストアンサー率53% (2177/4070)
回答No.1

とりあえず… 受信側は正しく動作していますか? >10053のエラー WSAECONNABORTEDです。 ErrorLookupでは…「確立された接続がホスト コンピュータのソウトウェアによって中止されました。」 となります。 受信側がrecv()していなくて受信バッファがあふれたとか、 受信側のソフトが不正終了したとか、 接続したまま長時間放置していて経路の途中で切られたとか…

monokono
質問者

補足

回答ありがとうございます。 クライアントから接続し、サーバでacceptした後、  クライアントからsend()→サーバでrecv()  サーバからsend()→クライアントでrecv() を繰返しており、 5回目のサーバからsend()の時に10053のエラーが起きているようです。 この場合はクライアントのほうの受信バッファがあふれたとか、 不正終了したとかを疑うべきなのでしょうか? 直前にselectして書き込み可能な状態なのを確認しているのですが、 それでも10053のエラーが起きてしまいます。

関連するQ&A

  • Winsockの通信処理にてファイル転送方法?

    環境:Windows2000とUNIXサーバ 開発:VisualStadioVer6.0 言語:C言語 やりたいこと:    クライアントからサーバにファイル送信を行う。 ただし、FTP通信を使わないで、別ポートにて、Winsockの send等でFTPもどきのファイル送信を行いたい。 ソケット通信はデータ送信なのは知っているのですが、 どうしても実現したいので、知ってる方は教えてください。

  • VBのソケット通信(winsock)のサイト

    VBでwinsockコントロールを使ってソケット通信にて、データの送受信をするプログラミングをするのですが、サンプルコードなどが載っているサイト、わかりやすく説明してあるサイトがありましたら教えてください。

  • UDP/IPでのソケット作成について(winsock)

    UDP/IPでのソケット作成について(winsock) 開発環境VC++.NET、O/S WIN2000にてソケットプログラミング(winsock2.0)をしています。 コンソールプログラミングではありませんが、WindProcは持っていません。 UDPサーバーを作り、複数クライアントの対応をしたいと考えています。 クライアントAからの通信やりとり中に クライアントBからの通信がきたら、そちらとも通信やりとりを(自動で)行いたい。 ここで問題なのが、クライアントAの要求ポートが15000で、 クライアントBの要求ポートも15000なのです。 同じ既に開いているポートでソケット作成しようとしても、socket()関数はエラーを返してくるのですが、 やり方を工夫すれば、同一ポートでの複数クライアント対応は可能なのでしょうか。不可能なのでしょうか。 可能であれば、やり方、ヒント等教えてください。よろしくお願いします。 追記 (1)TCP/IPでは、同一ポートでソケット作成が可能でした。ネットで探したサンプルプログラムが  そのような動きをしていたのですが、UDPに書換えることはできませんでした。  http://eternalwindows.jp/network/winsock/winsock04s.html (2)UNIXの場合fork()処理後に socket()作成 → bind()で同一ポートでの複数クライアント対応が  上手くいくらしいのですが、Windowsではマルチスレッド等をうまく活用すれば、  fork()と同様の処理が可能になり、目的が達成できるでしょうか。

  • ソケット通信での再接続

    ソケット通信での再接続 ソケット通信でサーバ側は立ち上げたまま、 クライアント側を同じポート番号で 何度も再接続できるようにしたいと考えております。 http://blog.livedoor.jp/akf0/archives/51585502.html を参考にマルチスレッドを利用してプログラムを作成してみましたが 最初の起動に関してはうまくいくのですが、 クライアント側を一度終了してもう一度再接続すると、 バインドエラーが出ます。 いろいろ試してみたのですが、 どうしてもうまくいきません。 どうすればいいのでしょうか。 ご存じの方がいらっしゃればお答えいただきたいと思っております。 よろしくお願いいたします。 環境 OS:Windows XP 開発環境:Visual Studio 2008 Express Edition ソケット通信:winsock2 マルチスレッド:win32api

  • WinSock32のTCP通信において、recvする前にどれだけの量がソケットにたまっているか調べる方法ってありますか?

    タイトルのとおりなのですが、 WinSock32のTCP通信において、recvする前にどれだけの量がソケットにたまっているかを調べたいのですが、方法が見つかりません。 WinSock32の関数に用意されているのでしょうか? 関数名だけでもいいので教えていただけると助かります。 よろしくお願いいたします

  • ソケットで通信できない

    Solaris + C で作成したプログラムAと、 PC上のVBで作成されたアプリBとの通信を行おうとしていま。 PC側のVBで、 Winsock.LocalPort = 3000 Winsock.Listen の処理があります。 Aではソケットの生成(socket)→接続(connest)→書込み(write)を行っていますが、すべて成功している模様です。 ・・が、VB側のWinsock_DataArrivaでブレークしていても、一向に受信する気配がありません。 VB及びソケットに関して、ほとんど知識がないので上記処理であっているかも分かっていません。 解決策をご存知の方がおられましたら、ご教授願いたく。

  • Winsockについて

    OS :WindowsXP 開発言語 :VC++ Winsock :2.2 現在、Winsockプログラムにて下記のようなテストをしています。 接続 ⇒ データ送信(正常) ⇒ LANケーブル抜く ⇒ データ送信(当然エラー) ⇒ LANケーブル挿す ⇒ データ送信 ・・・ ←ここでもエラーが発生してしまいます。 Winsockの通信は一度切れてしまうと最初から接続しなおさないと駄目なのでしょうか。

  • .netでソケット通信

    .net(C++)をベースにソケット通信の設計を進めています。 .netでソケット通信を実装する場合、Socketクラスが用意されていますが、 これはWindowsソケットインターフェイス(Winsock)なのでしょうか。 そうであれば、同時に64個のイベントオブジェクトまでしか待つことができない 制限が存在するのでしょうか。 お願いします。

  • ソケット通信について

    こんにちは。初心者開発者です。 .NetでPDAをクライアントにしたクライアントサーバー型の処理を現在開発しております。 【環境】 場所:台湾 クラアント:Windows CE5.0 サーバー:WindowsXP 中国語版 無線LANアクセスポイント:ASUS RT-G32 【現象】 ソケット通信自体はできたのですが、いくつかの疑問点があります。 (1)無線LANポイントの機種によってPDAとソケット通信してる間しかPingが通らない。  PCからPDAのPingが通らない状況で、ソケット通信が始まるとPingが通る状態になります。 (2)(1)の無線LANポイントだとPDAでのレシーブ時のポーリングが永久にレシーブOKの状態にならない。  無線LANのソケット通信の立ち上がりを検出できないのか、初回のポーリングが永久にOKにならない事が多いです。  ソケットをシャットダウンしてクローズした後に再処理した時に上手くいくことが多いです。 (3)70k程度の通信に10秒以上かかることがあります。サーバーがセンドしてからクラアントがレシーブするまで。  ソケット通信だと大体こんなかかるものなのでしょうか? 【質問】 (1)(2)の現象に関しては、台湾の業務で導入をしていますが、現地で購入できる無線LANでお勧めの物があれば教えていただければと思います。 後、通信中でなくても常にPingが通る状態というのは何かそれようの設定があるのか、心当たりがあったら教えていただければと思います。 (3)自分初めてソケット通信プログラムを作りますので大体の所感が分かりません。  宜しかったら、それだと絶望的に遅いから何かを見直した方がいいとかアドバイスいただければと思います。 よろしくお願いいたします。

  • 現在WINSOCKコントロールを用いて通信プログラムを作成しています

    現在WINSOCKコントロールを用いて通信プログラムを作成しています サーバ側の設定が IP:192.168.1.10 Port:10000のとき、 Winsock.state = 7(Listen状態) クライアント側で Winsock.Close Winsock.RemoteHost = "192.168.1.10" Winsock.RemotePort = 10000 Winsock.Connect で実行したときにエラー10061で返ってきます。 NETSTAT -anで他にこのポートを使用ものは有りませんでした どのようにすればエラーが回避できますでしょうか?

専門家に質問してみよう