2012-03-22 10 views
1

私は.NETのSocketクラスを使用しています。ソケットを閉じずにソケットの送受信を何度も呼び出す方法

私のプログラムは、TCPを介して私のサーバーに(私はいくつかのサードパーティサービスを実行して)XMLコマンドを送信することです、そして、それはXML応答を返送します。

私がやりたいことは、ソケットを閉じずに複数回送受信することです。短時間でソケットを開いたり閉じたりするとサーバーの速度が低下するようです。私のコードのバージョンダウン剥奪

:それは、送信/受信

//Connects to server 
s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 
IPEndPoint ipe = new IPEndPoint("123.123.123.123", 8199); 
socket.Connect(ipe); 

//Send my message 
int sent = sock.Send(buffer, buffer.Length, SocketFlags.None); //buffer contains my XML data 

//Receives respond from server 
byte[] buf = new byte[65536]; 
int ret = socket.Receive(buffer, 0, 65536, SocketFlags.None); 

//Send my message again without closing the socket 
sent = sock.Send(buffer, buffer.Length, SocketFlags.None); //buffer contains my XML data 

//Receives respond from server failed.. 
ret = socket.Receive(buffer, 0, 65536, SocketFlags.None); 

は、二度目は初めての作品ではなく。 2回目に、「既存の接続がリモートホストによって強制的にクローズされました」という例外がスローされます。私は別の送受信を発行する前に何をする必要がありますか?

ありがとうございました。

+1

何も意味がありません。それはブロックですか?それとも-1を返していますか?いくつかの例外を投げたりしますか? – Jeeva

+0

ここで、Receiveメソッドのtehコードはありますか?それとも、それは靴下のことですか? FLASHNET_CMD_LENGTHは何に設定されていますか? –

+0

@ Jeevaこれは、 "既存の接続がリモートホストによって強制的に閉じられました"という例外をスローします。 – Bruce

答えて

1

問題は、これらの

  • 他のエンドポイントは何もデータがサーバが閉じている可能性のある他のクライアント

によって送信されませんので、あなたの受信方法をブロックしている接続

  • を閉じたかもしれない可能性があります無効なパケットを送信する可能性があるため、接続してください。送信しているデータが有効かどうかを確認してください。サーバー側でデバッグするか、またはtcp/ipパケットを受信し、受け取ったパケットを調べます。

  • 関連する問題