[英]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.