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

通过TCPClient发送到Android上Java服务器套接字的数据导致线程挂起,java,c#,android,sockets,Java,C#,Android,Sockets,我正在创建一个Android应用程序,它可以发送短信SMSManager类。这是我为开发人员创建的应用程序,因此,该应用程序必须与各种编程语言互操作。该应用程序似乎与JAVA和PHP配合得很好 我在C方面遇到了一些问题 TcpClient sock = new TcpClient(); sock.Connect("192.168.1.24", 5000); NetworkStream ns = sock.GetStream(); S

我正在创建一个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();
                }
         }
我已经检查了进入Android应用程序的输入,这完全正常。但当我使用从套接字接收的输入时,Logcat应用程序的日志显示:

W/System.err(14636): at com.app.mysmsgateway.Receiver.run(MainActivity.java:498)
第498行包含以下内容:

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


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

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

张贴完整的日志。我们甚至不知道您会遇到什么类型的异常。第一个问题:您忽略了Stream.Read和InputStream.Read的返回值,这两个值都告诉您读取了多少字节。第二个问题:您假设您可以在一次调用中读取所需的所有数据。第三个问题:您在两个代码库中都使用了平台默认编码-您如何知道这是相同的?@PedroOliveira-I/ActivityManager 181:displated com.app.mysmsgateway/.main活动:+1s33ms编辑:System.err id也是14636,错误地输入了一个。@JonSkeet:我只提供了一个输入,我得到了三种输出。输入:phonenumbermessage输出:1。传送。2.失败。3.传送。交付。我环顾了一下互联网,我认为C和Java在其字符串上使用的编码是UTF-16?@JonSkeet:看起来我错了。defaultCharacterEncoding by property:Cp1252 defaultCharacterEncoding by charSet:windows-1252。这是通过运行一段Java代码得到的。