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

C#:套接字未正确接收消息?,c#,.net,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 IPEndPoin

我正在尝试以客户端发送的字符串显示消息。我编写了一个简单的客户端应用程序,然后用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());
    }
}

input
是一个
IByteBuffer
,它是数据当前存储位置的一个抽象-在本例中,显然是一个
instrumentedUpoledHeapByteBuffer
,但这并不重要

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

var s = input.GetString(input.ReaderIndex, input.WriterIndex, yourEncoding);
(或类似于
input
属性之一的
0
3


其中
yourEncoding
是要使用的文本编码。请注意,在调用者处,您使用了
编码。默认值
,但这是一个糟糕的选择,因为这是特定于机器的;我可以猜出这对你来说可能是什么,但我真的不知道你的
编码是什么。更好的选择是
编码.UTF8
(两端)。

您发送了3个字节;你收到了3个字节;是什么让你觉得有问题?
input
没有方法
GetString
,所以你的答案无效。@seegal-如果你使用的不是这个版本,那么你必须使用任何可用的方法
var s = input.GetString(input.ReaderIndex, input.WriterIndex, yourEncoding);