【问题标题】:TCP Server gets ???????? instead of the real messageTCP 服务器获取 ??????????而不是真正的信息
【发布时间】:2017-01-16 13:18:47
【问题描述】:

服务器是用 c# 编写的,并且可以与我用 c# 制作的客户端正常工作,现在我正在尝试制作一个 android 客户端,但服务器没有收到真正的消息,它只有很多问号。

这是服务器

TcpListener listen = new TcpListener(IPAddress.Any, 1200);
TcpClient client;
listen.Start();
client = listen.AcceptTcpClient();
NetworkStream stream = client.GetStream();
byte[] buffer = new byte[client.ReceiveBufferSize];
int data = stream.Read(buffer, 0, client.ReceiveBufferSize);
string message = Encoding.Unicode.GetString(buffer, 0, data);
Console.WriteLine(message);

这是安卓客户端

EditText et = (EditText) findViewById(R.id.EditText01);
String str = et.getText().toString()
PrintWriter out = new PrintWriter(new BufferedWriter(
            new OutputStreamWriter(socket.getOutputStream())),
                true);
out.println(str);

例如,如果我发送消息“Hello”,服务器会打印“???????????”我发送的任何消息都会发生同样的情况,即使只有 1 封信

我也尝试过类似这样的不同方法,但结果是一样的:

DataOutputStream out = new DataOutputStream(socket.getOutputStream());
        out.writeBytes(str);

【问题讨论】:

  • 看起来像编码问题。检查服务器上设置了什么编码
  • 尼基塔是什么意思?我试图在 PrintStream 中更改 Android 客户端 out = new PrintStream(socket.getOutputStream());但我仍然遇到同样的错误
  • String str = et.getText().toString()。最好使用预定义的字符串。并告诉我们发送了多少字节,接收了多少字节。
  • 我试过 String str = "hello";但它仍然只有??????

标签: c# android sockets tcpclient tcplistener


【解决方案1】:

变化:

string message = Encoding.Unicode.GetString(buffer, 0, data);

进入:

string message = Encoding.UTF8.GetString(buffer, 0, data);

也可以试试UTF16。我认为java现在使用这种编码。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-01
  • 1970-01-01
  • 2016-04-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多