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を返していますか?いくつかの例外を投げたりしますか? – Jeeva
ここで、Receiveメソッドのtehコードはありますか?それとも、それは靴下のことですか? FLASHNET_CMD_LENGTHは何に設定されていますか? –
@ Jeevaこれは、 "既存の接続がリモートホストによって強制的に閉じられました"という例外をスローします。 – Bruce