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

标签 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)

最佳答案

input 是一个 IByteBuffer,它是围绕数据当前存储位置的抽象 - 在本例中显然是一个 InstrumentedUnpooledHeapByteBuffer,但是没关系。

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

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

(或来自 input 属性之一的 03 类似的东西)

其中 yourEncoding 是要使用的文本编码。请注意,在调用方您使用了 Encoding.Default,但这是一个糟糕的选择,因为这是特定于机器的;我可以它可能适合您,但我真的不知道您的Encoding.Default 是什么。更好的选择是类似 Encoding.UTF8(在两端)。

关于C#:套接字没有正确接收消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49671491/

相关文章:

c# - linq 和字符串数组

c# - System.Drawing - 参数无效

c# - 如何为基本身份验证配置 Web Api 2 和 IIS?

.net - 如何在 .Net 中处理多达 100k 的 HTTP 连接

.net - 为什么Web Api使用 “$ref=”返回空的json结果?

c# - 将 IUnknowns 的 SAFEARRAY 转换/转换为可迭代的接口(interface)指针数组

c# - HttpClient 和 HttpRequestHeaders.Range

.net - 在使用 ILMerge/Costura 组合程序集后,有什么方法可以让 VS (2010) 接受 PDB?

c# - 验证摘要和错误的自定义格式

c# -/unsafe标志对应的是 "preprocessor"符号吗?