【问题标题】:How to use TCP Client in Android without Sockets?如何在没有套接字的情况下在 Android 中使用 TCP 客户端?
【发布时间】:2016-09-08 21:45:51
【问题描述】:

我有一个 C# 中的 TCP 服务器和一个 C# 中的 TCP 客户端,现在我也需要一个 Android 中的 TCP 客户端。

我找到的所有示例都与套接字有关,但我使用的是简单的 TCP 客户端,因此它们不起作用。

现在我的 C# TCP Client 是这样的:

TcpClient client = new TcpClient("127.0.0.1", 1200);
        NetworkStream n = client.GetStream();
        Console.WriteLine("Insert name");
        string name= Console.ReadLine();
        byte[] message = Encoding.Unicode.GetBytes(name);
        n.Write(message, 0, message.Length);

这个函数在Android中有对应的吗?

这是我正在尝试的实际 android 客户端,但它不起作用

InetAddress serverAddr = InetAddress.getByName("127.0.0.1");

        socket = new Socket(serverAddr, 1200);
        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);

【问题讨论】:

  • TcpClient 中有一个套接字。所以,在 Android 中使用套接字
  • 我试过了,连接不通。所以我猜如果你的服务器没有设置为套接字而只是作为 tcpclient 工作,你就不能发送套接字
  • TcpClient和socket没有区别。由于其他原因,它不起作用。
  • 我刚刚编辑了帖子,添加了我正在尝试的客户端,但这不起作用

标签: c# android tcp


【解决方案1】:

首先,这一行:

InetAddress serverAddr = InetAddress.getByName(127.0.0.1);

包含语法错误。应该是:

InetAddress serverAddr = InetAddress.getByName("127.0.0.1");

其次,地址“127.0.0.1”指的是执行客户端的“同一台机器”。对于您的 C# 程序,服务器与客户端在同一台机器上运行,因此它可以工作。但在 Android 的情况下,没有在“同一台机器”上运行的服务器,即您的 Android 手机(如果它是模拟的,127.0.0.1 是指模拟的 Android 设备,而不是它工作的 PC) .您必须为 Android 设备指定一个“好的”地址,该地址指的是执行服务器的机器。

所以,问题不在于使用套接字。

【讨论】:

  • 大约 12.0.0.1,我这里复制代码的时候只是一个错误,在真实代码中一切都很好。现在我试试你所说的关于模拟器的内容
  • 好的,现在连接正常,但是当我发送消息时,它在 mscorlib.dll 中显示“System.FormatException”,问题是当我尝试以整数解析字符串时,即使消息只是一个数字。 c# 客户端版本中不存在此问题。所以我仍然认为它可能与套接字有关
  • 再次,它与套接字无关。在服务器端的控制台上打印消息以查看它接收到的内容。另外,在out.println(str);之后添加out.flush();
  • 我做了一个测试,我只是打印从客户端得到的字符串,控制台打印:??????????所以肯定有问题,因为服务器没有收到真正的消息
  • 这是一个编码问题。试试PrintStream out = new PrintStream(socket.getOutputStream(); 并向我们展示服务器
【解决方案2】:

您可以使用这条线路简单地连接到您的服务器,如果您的服务器正在您的 PC 上运行,也可以尝试禁用您的防火墙。

Socket server= new Socket("192.168.1.1", 4444); // Enter your PC/Server IP address in place of 192.168.1.1

【讨论】:

  • 连接正常,但服务器无法理解该消息。如果我发送“你好”,它会得到:“????????????”
猜你喜欢
  • 2012-03-29
  • 1970-01-01
  • 2016-01-25
  • 2012-06-24
  • 2021-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多