ネットワークフレームワーク v2 では、ソケットは次のように Invoke (BeginRead) メソッドを使用してメソッド (例 ReceiveMsg) を呼び出します。
クライアント = 新しい TcpClient();
client.Connect(SERVERIP, PORTNO);
データ = 新しいバイト [client.ReceiveBufferSize];
SendMessage("こんにちは\n");
client.GetStream().BeginRead(data, 0, System.Convert.ToInt32(client.ReceiveBufferSize), ReceiveMsg, null);
このソケットの ReceiveMsg メソッドは、SocketServer によってブロードキャストされたメッセージを受信するために待機するように、常に「自動モード」になりますか?
または System.Threading.Thread.Sleep() を使用して ReceiveMsg メソッドを常にアクティブにして、SocketServer ブロードキャスト メッセージに応答する準備ができているモードにしますか?
BeginRead() が不要になったため、この ReceiveMsg メソッドの Netframework v4 または 4.5 ソケットでこれを行う方法。
ありがとう。
以下は、netframework v4 のソケットのコードです: http://msdn.microsoft.com/en-us/library/hh202858(v=vs.92).aspx (WP mango/ Wp8 用)
Client.Connect(); Client.Send(); Client.Receive();
公開文字列 Receive()
{
//-- サーバーからの応答を受け取る
string response = "受信操作タイムアウト";
// 確立されたソケット接続を介して受信しています
if (_socket != null)
{
// SocketAsyncEventArgs コンテキスト オブジェクトを作成します
SocketAsyncEventArgs socketEventArg = new SocketAsyncEventArgs();
socketEventArg.RemoteEndPoint = _socket.RemoteEndPoint;
// データを受信するためのバッファをセットアップします
socketEventArg.SetBuffer(新しいバイト[MAX_BUFFER_SIZE], 0, MAX_BUFFER_SIZE);
// Completed イベントのインライン イベント ハンドラ。
// 注: このイベント ハンドラは、このメソッドを自己完結型にするためにインラインで実装されました。
socketEventArg.Completed += new EventHandler(delegate(object s, SocketAsyncEventArgs e)
{
if (e.SocketError == SocketError.Success)
{
// バッファからデータを取得します
response = Encoding.UTF8.GetString(e.Buffer, e.Offset, e.BytesTransferred);
response = response.Trim('\0');
}
そうしないと
{
応答 = e.SocketError.ToString();
}
_clientDone.Set();
});
// イベントの状態を非シグナル状態に設定し、スレッドをブロックさせます
_clientDone.Reset();
// ソケットを介して非同期受信リクエストを作成します
_socket.ReceiveAsync(socketEventArg);
// UI スレッドを最大 TIMEOUT_MILLISECONDS 秒間ブロックします。
// この時間内に応答が返ってこない場合は続行します
_clientDone.WaitOne(TIMEOUT_MILLISECONDS);
}
そうしないと
{
response = "ソケットが初期化されていません";
}
応答を返します。
}