簡體   English   中英

如何通過 C# windows 應用程序發送數據並使用 TCP/IP 協議從 android 客戶端接收數據

[英]How to send data by C# windows application and recieve it from android Client using TCP/IP protocal

我有 Win forms 應用程序將數據傳輸到 android 應用程序並從中接收。 我沒有問題讓 C#application 監聽 android 並獲取數據,但是當我嘗試將數據發送到 android android 應用程序時什么也不顯示。

RecordsBoard.java:

public class RecordsBoard {

// 數據庫助手 mydb; 私人最終活動所有者;

private final ListView lv;
private final ArrayList<HashMap<String, String>> dataMerged = new ArrayList<HashMap<String, String>>();
private final SimpleAdapter adapterMergedData;


private final TextView tvCount;
private final TextView rfid;
private final TextView te;
public RecordsBoard(Activity context, View ll) {
    owner = context;

    adapterMergedData = new SimpleAdapter(owner, dataMerged, R.layout.common_lv2overlap_tv2, new String[]{"0", "1"}, new int[]{R.id.idE2CommenLv2OverlapTv1_tv0, R.id.idE2CommenLv2OverlapTv1_tv1});

    lv = (ListView) ll.findViewById(R.id.idE2CommenLv2Overlap_lvShow);
    lv.setAdapter(adapterMergedData);
    rfid = (TextView) ll.findViewById(R.id.test);
    tvCount = (TextView) ll.findViewById(R.id.idE2CommenLv2Overlap_tvTagsCount);
    te = (TextView) ll.findViewById(R.id.test1);

}

public void addMassage(final String string) {
    owner.runOnUiThread(new Runnable() {

        @Override
        public void run() {
            // update the merged data list
          //  DatabaseHelper mydb = new DatabaseHelper(this);
            int index = 0;
            for (; index < dataMerged.size(); index++) {
                HashMap<String, String> omap = dataMerged.get(index);
                if (omap.get("0").equals(string)) {// found it
                    int num = 1;

                    String numString = omap.get("1");
                    if (numString != null) {
                        try {
                            num = Integer.valueOf(numString);
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    }
                    num++;
                    omap.put("1", "" + num);
                    break;
                }
            }
            if (index == dataMerged.size()) {// not found in merged data list
                HashMap<String, String> map = new HashMap<String, String>();
                map.put("0", string);
                //map.put("1", "" + 1);
                dataMerged.add(map);
                //if(!"{".equals(map)){
                String s= map.toString();
                // s= s.replaceAll("}","");
                //rfid.setText(s);
                    rfid.setText(rfid.getText().toString()+ s);
                            messagesender message = new messagesender();//send to C# class
                              message.execute(s);
                Thread myThred = new Thread(new Myserver());
                myThred.start();
              //  }
                   // if(!"}".equals(map))

            }
            tvCount.setText("" + dataMerged.size());

          /* String s= rfid.getText().toString();
           s= s.replaceAll("}","");
           rfid.setText(s);*/
           adapterMergedData.notifyDataSetChanged();
        }
    });
}
class Myserver implements Runnable{//Here I reviece the data
    Socket s;
    ServerSocket ss;

    InputStreamReader isr;
    BufferedReader bufferedReader;
    Handler h1 = new Handler() ;
    String msg;
@Override
public void run() {

    try{
        ss=new ServerSocket(9999);

        while (true){
            s=ss.accept();
            isr = new InputStreamReader(s.getInputStream());
            bufferedReader = new BufferedReader(isr);
            msg=bufferedReader.readLine();
            h1.post(new Runnable() {
                @Override
                public void run() {

                    //Toast.makeText(this.getApplicationContext(),msg,Toast.LENGTH_SHORT).show();
                   te.setText(msg);
                }
            });
        }


    }
    catch(IOException e)
    {
        e.printStackTrace();
    }
 }
}
public void resetMassages(final ArrayList<HashMap<String, String>> msgs) {
    owner.runOnUiThread(new Runnable() {
        @Override
        public void run() {
            dataMerged.clear();
            dataMerged.addAll(msgs);

            tvCount.setText("" + dataMerged.size());

            adapterMergedData.notifyDataSetChanged();
        }
    });
}


public void clearMsg() {// clear data
    owner.runOnUiThread(new Runnable() {
        @Override
        public void run() {
            dataMerged.clear();
            tvCount.setText("" + dataMerged.size());
            adapterMergedData.notifyDataSetChanged();
        }
    });
}

public ArrayList<HashMap<String, String>> getData() {
    ArrayList<HashMap<String, String>> ret = new ArrayList<HashMap<String, String>>();
    ret.addAll(dataMerged);
    return ret;
}

public boolean isEmpty() {
    return dataMerged.isEmpty();
}

消息發送者.java:

public class messagesender extends AsyncTask<String, Void, Void> {



Socket s;
DataOutputStream dos;
PrintWriter print;

@Override
protected Void doInBackground(String... voids) {
    String message = voids[0];

    try {
        s = new Socket("192.168.1.125",9999);
        print = new PrintWriter(s.getOutputStream());
        print.write(message);
        print.flush();
        print.close();
        s.close();

    }catch (IOException e){
            e.printStackTrace();
        }

    return null;
}

}

C# 發送/接收線程:

new Thread(() =>
            {
                Thread.CurrentThread.IsBackground = true;

                TcpListener server = null;
                try
                {
                    // Set the TcpListener on port 13000.
                    Int32 port = 9999;
                    IPAddress localAddr = IPAddress.Parse("192.168.1.125");

                    // TcpListener server = new TcpListener(port);
                    server = new TcpListener(localAddr, port);

                    // Start listening for client requests.
                    server.Start();

                    // Buffer for reading data
                    Byte[] bytes = new Byte[256];
                    String data = null;

                    // Enter the listening loop.
                    // Enter the listening loop.
                    while (true)
                    {



                        Console.Write("Waiting for a connection... ");

                        // Perform a blocking call to accept requests.
                        // You could also user server.AcceptSocket() here.
                        TcpClient client = server.AcceptTcpClient();
                        Console.WriteLine("Connected!");

                        data = null;
                        //while (true)
                        //{
                        // Get a stream object for reading and writing
                        NetworkStream stream = client.GetStream();

                        int i;
                        int l = 0;
                        // Loop to receive all the data sent by the client.
                        while ((i = stream.Read(bytes, 0, bytes.Length)) != 0)
                        {
                            // Translate data bytes to a ASCII string.
                            data = System.Text.Encoding.ASCII.GetString(bytes, 0, i);

                            //  Console.WriteLine(data);
                            var charsToRemove = new string[] { "{", "}", "Uii", "0=", ":", " " };
                            foreach (var ca in charsToRemove)
                            {
                                data = data.Replace(ca, string.Empty);
                            }


                            info = data.Substring(4, 16);

                            //insert data into base 
                            if (test == info)
                            {//MessageBox.Show("Sub: " + info+ "nb:"+l, "sub");
                                DateTime now = DateTime.Now;
                                string sqlcode = @"INSERT INTO [dbo].[handcounter]
                               ([RFID])
                                VALUES
                               ('" + data + "')";
                                string source = "Data Source=DESKTOP-E2LOQH3;Initial Catalog=Store;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False";
                                SqlConnection con = new SqlConnection(source);
                                con.Open();
                                SqlCommand c = new SqlCommand(sqlcode, con);
                                c.ExecuteNonQuery();
                                con.Close();

                            }
                            data = "ala sender";

                            data = data.ToUpper();

                            byte[] msg = System.Text.Encoding.ASCII.GetBytes(data);

                            // Send back a response.
                            stream.Write(msg, 0, msg.Length);
                            Console.WriteLine("Sent: {0}", data);

                        }

                        // Shutdown and end connection
                        client.Close();
                    }
                }
                catch (SocketException m)
                {
                    MessageBox.Show("SocketException: {0}");
                }
                finally
                {
                    // Stop listening for new clients.
                    server.Stop();
                }


                Console.WriteLine("\nHit enter to continue...");
                Console.Read();
                // timer1.Stop();


                Console.WriteLine("Hello, world");
            }).Start();

感謝您的幫助...

        isr = new InputStreamReader(s.getInputStream());
        bufferedReader = new BufferedReader(isr);

把它從while循環中取出。

您應該只調用一次這些語句。

把它們放在一會兒之前。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM