通过TCPClient发送到Android上Java服务器套接字的数据会导致线程挂起

本文关键字:数据 挂起 线程 套接字 服务器 TCPClient Android Java 通过 | 更新日期: 2023-09-27 18:26:34

我正在创建一个发送短信的Android应用程序(SMSManager类)。这是我为开发人员创建的应用程序,因此,该应用程序必须能够与各种编程语言相互操作。该应用程序似乎可以很好地与JAVA和PHP配合使用。

我一直遇到C#的问题。

        TcpClient sock = new TcpClient();
        sock.Connect("192.168.1.24", 5000);
        NetworkStream ns = sock.GetStream();
        String str = "9840486945#hi";
        byte[] by = Encoding.Default.GetBytes(str);
        ns.Write(by, 0, by.Length);
        ns.Read(by, 0, by.Length);             //Will receive "Transmitted" or "Failed"
        string returndata = System.Text.Encoding.Default.GetString(by);
        Console.WriteLine(returndata);
        if(returndata.Equals("Transmitted"))
        {
             ns.Read(by, 0, by.Length);                     //Will receive "Delivered"
             returndata = System.Text.Encoding.Default.GetString(by);
             Console.WriteLine(returndata);
        }

在安卓方面,我尝试过:

        if(lang.equals("CS"))
        {
            byte[] by=new byte[1024];
            InputStream is;
            try {
                   is = s.getInputStream();
                   is.read(by);
                   input=new String(by);
                } 
             catch (IOException e) 
                {
                       // TODO Auto-generated catch block
                       e.printStackTrace();
                }
         }

我已经检查了进入安卓应用程序的输入,它完全正常。但当我使用从套接字收到的输入时,Logcat应用程序的日志显示:

W/System.err(14636): at com.app.mysmsgateway.Receiver.run(MainActivity.java:498)

这就是第498行包含的内容:

smsManager.sendTextMessage(phoneNo, null, msg, sentPI, deliverPI);

提前感谢!

EDIT:将两端的编码更改为UTF-8。仍然显示System.err.

通过TCPClient发送到Android上Java服务器套接字的数据会导致线程挂起

我发现了这个问题,我设置了一个预定义的字节数组大小,这导致了许多ASCII代码为0的字符,这意味着我的大部分字节数组都没有填充。解决了我的问题!感谢您抽出时间@Jonskeet和@PedroOlivera!