Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
android bufferReader.readLine()偶尔从C#TCP客户端返回垃圾数据?_C#_Android_Sockets_Tcp_Bufferedreader - Fatal编程技术网

android bufferReader.readLine()偶尔从C#TCP客户端返回垃圾数据?

android bufferReader.readLine()偶尔从C#TCP客户端返回垃圾数据?,c#,android,sockets,tcp,bufferedreader,C#,Android,Sockets,Tcp,Bufferedreader,我已经构建了一个使用UDP和TCP套接字的聊天应用程序,首先让我来介绍一下应用程序的机制: 当windows设备接收到数据包时,我从android设备向有多个windows设备监听的组地址发送一个UDP数据包,它会检查它是否有相同的电话号码,因此我使用该电话号码作为唯一的密钥来识别设备,然后如果它有与我发送数据包时使用的相同的电话号码,它将用一个密钥进行响应:“ImReadyNow”通过TCP套接字发送,这将使android设备接受连接并充当windows设备的服务器,我在第一次开始制作该应用程

我已经构建了一个使用
UDP
TCP
套接字的聊天应用程序,首先让我来介绍一下应用程序的机制: 当windows设备接收到数据包时,我从android设备向有多个windows设备监听的组地址发送一个
UDP
数据包,它会检查它是否有相同的电话号码,因此我使用该电话号码作为唯一的密钥来识别设备,然后如果它有与我发送数据包时使用的相同的电话号码,它将用一个密钥进行响应:“ImReadyNow”通过
TCP
套接字发送,这将使android设备接受连接并充当windows设备的服务器,我在第一次开始制作该应用程序时遇到了类似的问题,windows设备的respond键在返回之前和之后都返回了一些垃圾数据,我通过在该消息上附加一个键解决了这个问题,释放后我将其拆分,因此我面临的旧问题是当windows设备发送android设备接收的“Hello”时
“???你好”
我解决了这个问题,在第一个按摩按钮上加了一把钥匙 我将接收
“??$@!Hello”
然后我将接收到的字符串分成两部分,并仅显示消息,这对我来说很好,直到我注意到有时android设备只接收垃圾数据,这是随机发生的,就像windows设备发送“Hello”然后“hi”然后“Hello” 我可能会收到前两次按摩,但第三次按摩将作为
“??”收到

正如我告诉你们的,它是随机发生的,有人知道为什么会发生吗

调试
br之后,readLine()
方法有时会返回
“??”
,正如我随机说过的那样。 以下是我正在使用的代码:

private class ChatClientThread extends Thread {
              @Override
              public void run() {
               /*Socket socket = null;
               DataOutputStream dataOutputStream = null;
               DataInputStream dataInputStream=null;*/
                 // clientSocket=null;


               try {
                   String data=EmpPhoneNumber;


                    DatagramChannel channel = DatagramChannel.open();
                    DatagramSocket socket = channel.socket();
                   socket.setReuseAddress(true);
                   socket.bind(new InetSocketAddress(52276));
                   socket.setBroadcast(true);
                   InetAddress group = InetAddress.getByName(
                           "224.0.1.2");
                   System.out.println("HELLO");
                   System.out.println(data);
                   DatagramPacket packet = new DatagramPacket(data.getBytes(), data.length(),
                       group, 52276);
                   serverSocket=new ServerSocket();
                   serverSocket.setReuseAddress(true);
                    serverSocket.bind(new InetSocketAddress(4125));
                  int i=0;
                   while(i<=30){
                   Thread.sleep(200);
                   socket.send(packet);
                   i++;
                   }

                   while(true){

                       clientSocket = serverSocket.accept();

                       BufferedReader br= new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
                       strAcceptConnection= br.readLine();
                       System.out.println(strAcceptConnection);
                       if(!strAcceptConnection.contains("$@!")){
                           updateTextView("<font color=\"#0000A0\"> <b>"+empNameChat+": </b></font>"+"Error in recieving msg");
                       }else{
                       String parts[]=  strAcceptConnection.split("[$@!]+");

                       if(!parts[1].equals("ImReadyNoW")){
                       updateTextView("<font color=\"#0000A0\"> <b>"+empNameChat+": </b></font>"+parts[2]);
                       }}}



               } catch (UnknownHostException e) {
                e.printStackTrace();
                final String eString = e.toString();
                EmpDetails.this.runOnUiThread(new Runnable() {

                 @Override
                 public void run() {
                  Toast.makeText(EmpDetails.this, eString, Toast.LENGTH_LONG).show();
                 }

                });
               } catch (IOException e) {
                e.printStackTrace();
                final String eString = e.toString();
                EmpDetails.this.runOnUiThread(new Runnable() {

                 @Override
                 public void run() {
                  Toast.makeText(EmpDetails.this, eString, Toast.LENGTH_LONG).show();
                 }

                });
               } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }catch (NullPointerException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();

            }catch(Exception e){
                e.printStackTrace();
            }  finally {






                EmpDetails.this.runOnUiThread(new Runnable() {

                 @Override
                 public void run() {

                 }

                });
               }

              }


             }
        public void sendMessage(View view) {

            final String msg= et.getText().toString();
            et.setText("");
            new Thread(new Runnable() {
                public void run() {
                    Socket sock= null;
                    try {
                        sock= new Socket(clientSocket.getInetAddress().getHostAddress(), 4125);
                        Log.v("str", "send sock: "+sock.getInetAddress().getHostAddress()+sock.isConnected()+Integer.toString(sock.getPort()));
                    } catch (UnknownHostException e) {
                        Log.v("ERRORTAG", ""+e.getMessage());
                        e.printStackTrace();
                    } catch (IOException e) {
                        Log.v("ERRORTAG", ""+e.getMessage());
                        e.printStackTrace();
                    }catch (Exception e) {
                        e.printStackTrace();
                    }

                    try {
                        DataOutputStream out= new DataOutputStream(sock.getOutputStream());
                        if(!msg.equals("")){
                        out.writeUTF("XX$@!"+MainActivity.empIdFromD+"$@!"+msg);
                        out.flush();
                        updateTextView("<font color=\"#800000\"> <b>"+"You"+": </b></font>" + msg);}
                        }
                        catch (IOException e) {
                            Log.v("ERRORTAG", ""+e.getMessage());
                            e.printStackTrace();
                        }
                }

            }).start();
        }
        public void updateTextView(String message) {
            final String msg= message;
            uiHandle.post(new Runnable() {
                public void run() {

                    textView.setMovementMethod(new ScrollingMovementMethod());
                    Log.v("TAG", "updating textview");
                    //textView.append(msg+"\n");
                    textView.append(Html.fromHtml(msg));
                    textView.append("\n");
                    Log.v("TAG", "updated textview");
                    ScrollView sc= (ScrollView)findViewById(R.id.scrollView1);
                    sc.fullScroll(View.FOCUS_DOWN);
                }
            });
        }
私有类ChatClientThread扩展线程{
@凌驾
公开募捐{
/*套接字=空;
DataOutputStream DataOutputStream=null;
DataInputStream DataInputStream=null*/
//clientSocket=null;
试一试{
字符串数据=EmpPhoneNumber;
DatagramChannel=DatagramChannel.open();
DatagramSocket套接字=channel.socket();
socket.setReuseAddress(真);
绑定(新的InetSocketAddress(52276));
插座。路演(真实);
InetAddress组=InetAddress.getByName(
"224.0.1.2");
System.out.println(“你好”);
系统输出打印项次(数据);
DatagramPacket packet=新的DatagramPacket(data.getBytes(),data.length(),
组(52276);
serverSocket=新的serverSocket();
serverSocket.setReuseAddress(true);
bind(新的InetSocketAddress(4125));
int i=0;

同时(使用网络协议分析仪(如wireshark)为了扔掉你的垃圾信息,wireshark展示了什么?我不使用wireshark!我不知道如何学习它,在创建网络应用程序时,它是一个必备工具。我读了一点关于它的内容,但我真的不明白它有什么帮助,就像我已经知道问题的根源是readLine()但是它如何帮助我解决这个问题呢