ソケットを介して通信するクライアント/サーバーアプリケーションを作成しようとしています。しかし、私がデータを受け取ったとき、ランダムに混乱し、は常に(時には)正しいデータを表示しません。私がデータを受け取るために使用するコード:C#ソケット受信データが壊れる
private static void ReceiveCallback(IAsyncResult AR)
{
try
{
Socket socket = (Socket)AR.AsyncState;
if (SocketConnected(socket))
{
int received = socket.EndReceive(AR);
byte[] dataBuf = new byte[received];
Array.Copy(_buffer, dataBuf, received);
string text = Encoding.ASCII.GetString(dataBuf);
if (!text.Contains("GET") && !text.Contains("HTTP") && text != null)
{
Console.WriteLine(DateTime.Now.ToString("h:mm:ss tt") + ":" + text);
}
socket.BeginReceive(_buffer, 0, _buffer.Length, SocketFlags.None, new AsyncCallback(ReceiveCallback), socket);
}
}
catch
{
}
}
私はこれがなぜ起こったのか誰かが説明できますか?前もって感謝します!
また、私はキャラクター(すべてのレスポンス ' - 'の終わりにありますが動作しませんでした)が見つかるまでチェックしようとしました。 Unfortunatleyこれは結果でした:
方法:.NETの世界でフォーマットをエンコードする文字を使用すると、ASCIIの代わりにあなたがUnicodeに受信バイトを変換する必要があり、「ユニコード」です。コールバックと同じメソッドを呼び出します。コードの構造をより多くのメソッドに分割し、開始と終了の呼び出しを別々に処理する方が良いでしょう。コードがより構造化されていれば、ここで問題をデバッグするのに役立ちます。 – ManoDestra
EndReceiveの後にBeginReceiveを取得しませんでした。それは機能しますか? – devprashant