C#:套接字没有正确接收消息?

时间:2018-04-05 11:41:21

标签: c# .net

我试图在客户端发送的字符串中显示消息。我编写了一个简单的客户端应用程序,然后用DotNetty编写了一个服务器。客户端应用程序仅用于测试。

客户端:

var ipAddress = "127.0.0.1";
var port = 1232;

var socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

try
{
    socket.Connect(new IPEndPoint(IPAddress.Parse(ipAddress), port));
}
catch (SocketException se)
{

}

byte[] forwardMessage = Encoding.Default.GetBytes("lol");
socket.Send(forwardMessage);

Console.ReadLine();

服务器解码器:

internal class Decoder : MessageToMessageDecoder<IByteBuffer>
{
    protected override async void Decode(IChannelHandlerContext context, IByteBuffer input, List<object> output)
    {
        Console.WriteLine("Socket says: " + input.ToString());
    }
}

当从客户端向服务器发送消息时,我得到了这个。

Socket says: InstrumentedUnpooledHeapByteBuffer(ridx: 0, widx: 3, cap: 1024)

1 个答案:

答案 0 :(得分:3)

inputIByteBuffer,它是当前存储数据的抽象 - 在这种情况下显然是InstrumentedUnpooledHeapByteBuffer,但这并不重要。< / p>

您可以通过IByteBuffer上的范围方法获取原始数据,但看起来最简单的方法就是:

var s = input.GetString(input.ReaderIndex, input.WriterIndex, yourEncoding);

(或与0属性之一的3input类似的内容)

其中yourEncoding是要使用的文本编码。请注意,在调用者处使用Encoding.Default,但这是一个糟糕的选择,因为这是特定于机器的;我可以猜测它可能对你有什么影响,但我真的无法知道你的Encoding.Default是什么。更好的选择是Encoding.UTF8(两端)。