Netty服务器和C#Socket客户端。客户不接收';行不通

Netty服务器和C#Socket客户端。客户不接收';行不通,c#,sockets,netty,tcpclient,protobuf-net,C#,Sockets,Netty,Tcpclient,Protobuf Net,我想从Netty服务器接收C#client上的消息。我使用sync C#socket和protobuf。 我发送消息到服务器,它是确定的。但是我没有收到回复。 Netty服务器使用ProtobufDecoder。服务器ChannelInboundHandler具有以下部分代码: public void channelRead0(final ChannelHandlerContext ctx, Object msg) { ... Set<String

我想从Netty服务器接收C#client上的消息。我使用sync C#socket和protobuf。 我发送消息到服务器,它是确定的。但是我没有收到回复。 Netty服务器使用ProtobufDecoder。服务器ChannelInboundHandler具有以下部分代码:

 public void channelRead0(final ChannelHandlerContext ctx, Object msg) {
        ...
            Set<String> keys = jedis.keys("tanks*");

            String allKeys = "";
            for(String key: keys){
                allKeys+=key+";";
            }

            ctx.write(allKeys);
            ctx.flush();
}

若我在服务器上调用ctx.close(),客户端将不会收到任何字节或空数组。任何帮助都将不胜感激。谢谢。

首先,我对内蒂一无所知。因此,要么是服务器没有发送,要么是因为客户端从networkstream读取数据太早。在您向服务器发送消息作为测试后,尝试将thread.sleep设置为2秒或服务器需要的任何时间。谢谢您的回复。我已经解决了。解决方案是在ctx.write(obj)中使用obj。在本例中,obj具有msg对象类型,但不具有字符串类型。我真可耻!!!显然,需要添加通道管道ProtobufEncoder。为什么不用它来回答您自己的问题?
 const string server = "localhost";
const int port = 8080;
var tcpClient = new TcpClient(server, port);
_networkStream = tcpClient.GetStream();

var stream = new MemoryStream();
Serializer.Serialize(stream, tankDataObject);
var data = stream.ToArray();
_networkStream.Write(data, 0, data.Length);

data = new Byte[10000];

// String to store the response ASCII representation.
String responseData = String.Empty;

// Read the first batch of the TcpServer response bytes.
Int32 bytes = _networkStream.Read(data, 0, data.Length);
responseData = System.Text.Encoding.ASCII.GetString(data, 0, bytes);

// Close everything.
_networkStream.Close();
tcpClient.Close();