嗯,我是套接字的新手,甚至是Java的新手,所以Java方面基本上是复制和粘贴的。 C#方面更加自制。
我认为Java和C#解释字符串的方式可能有些不同;我已经使用Java中现已弃用的“readLine”方法来部分工作。
在C#方面:
private void pollChat()
{
while (clientSocket.Connected)
{
try
{
NetworkStream serverStream = clientSocket.GetStream();
byte[] inStream = new byte[10025];
serverStream.Read(inStream, 0, (int)clientSocket.ReceiveBufferSize);
string returndata = System.Text.Encoding.UTF8.GetString(inStream);
msg(returndata);
}
catch (SocketException)
{
clientSocket.Close();
msg("Socket Exception");
}
}
}
...用于接收内容,(我将System.Text.Encoding.ASCII更改为UTF8,但没有帮助)...和
NetworkStream serverStream = clientSocket.GetStream();
byte[] outStream = System.Text.Encoding.UTF8.GetBytes(nickname + ": " + textBoxToSubmit.Text + "$");
serverStream.Write(outStream, 0, outStream.Length);
serverStream.Flush();
......发送东西。
在Java服务器端......
void sendToAll( String message ) {
synchronized( outputStreams ) {
for (Enumeration e = getOutputStreams(); e.hasMoreElements(); ) {
DataOutputStream dout = (DataOutputStream)e.nextElement();
try {
dout.writeBytes( message );
} catch( IOException ie ) { System.out.println( ie ); }
}
}
}
...用于发送内容,
while (true) {
// ... read the next message ...
String message = din.readUTF();
// ... tell the world ...
System.out.println( "Sending "+message );
// ... and have the server send it to all clients
server.sendToAll( message );
}
......接收东西。
我为大量粘贴的代码道歉,但请耐心等待。
提前致谢!
答案 0 :(得分:1)
我注意到的第一件事是你试图直接从流中读取Unicode字符串。出于两个原因,这是有问题的。
除了拉出原始字节的函数之外,我不建议使用readUTF或任何函数。一旦你处理了我上面提到的两个问题,你就会得到一个带有完整信息的字节数组。只有这样才能尝试将字节转换为正确的编码方案。