Netty服务器和C#Socket客户端。客户不接收';行不通
我想从Netty服务器接收C#client上的消息。我使用sync C#socket和protobuf。 我发送消息到服务器,它是确定的。但是我没有收到回复。 Netty服务器使用ProtobufDecoder。服务器ChannelInboundHandler具有以下部分代码: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
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();