Wie man client auf Android hören-server auf C#?
Ich habe einen client auf Android und server auf c#. Der client sendet Nachrichten an server und es ist in Ordnung. Aber ich brauche server zu senden, auf Anfrage die Liste der Ordner und Dateien im angegebenen Verzeichnis und nicht wissen, wie zu tun, dass, da der client nicht alle Nachrichten vom server. Der client ist der Teil des Codes, der bestimmt ist zu hören, funktioniert nicht, die Anwendung einfach stucks, bis ich das schließen der server-Anwendung, dann funktioniert es wieder, aber noch nicht gelesen.
Vielen Dank im Voraus
Client:
package com.app.client.app;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
import android.util.Log;
public class my_activity extends Activity {
private TextView txt;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button b = (Button)findViewById(R.id.button1);
txt = (TextView)findViewById(R.id.textView1);
b.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//TODO Auto-generated method stub
connectSocket("Hello");
}
});
}
private void connectSocket(String a){
try {
InetAddress serverAddr = InetAddress.getByName("192.168.1.2");
Log.d("TCP", "C: Connecting...");
Socket socket = new Socket(serverAddr, 4444);
message = "1";
PrintWriter out = null;
BufferedReader in = null;
try {
Log.d("TCP", "C: Sending: '" + message + "'");
out = new PrintWriter( new BufferedWriter( new OutputStreamWriter(socket.getOutputStream())),true);
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
out.println(message);
while ((in.readLine()) != null) {
txt.append(in.readLine());
}
Log.d("TCP", "C: Sent.");
Log.d("TCP", "C: Done.");
} catch(Exception e) {
Log.e("TCP", "S: Error", e);
} finally {
socket.close();
}
} catch (UnknownHostException e) {
//TODO Auto-generated catch block
Log.e("TCP", "C: UnknownHostException", e);
e.printStackTrace();
} catch (IOException e) {
//TODO Auto-generated catch block
Log.e("TCP", "C: IOException", e);
e.printStackTrace();
}
}
}
Server:
using System;
using System.Text;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Windows.Forms;
public class serv {
public static void Main() {
try {
IPAddress ipAd = IPAddress.Parse("192.168.1.2");
//use local m/c IP address, and
//use the same in the client
/* Initializes the Listener */
TcpListener myList=new TcpListener(ipAd,4444);
/* Start Listeneting at the specified port */
myList.Start();
Console.WriteLine("The server is running at port 4444...");
Console.WriteLine("The local End point is :" +
myList.LocalEndpoint );
Console.WriteLine("Waiting for a connection.....");
m:
Socket s=myList.AcceptSocket();
Console.WriteLine("Connection accepted from " + s.RemoteEndPoint);
byte[] b=new byte[100];
int k=s.Receive(b);
char cc = ' ';
string test = null;
Console.WriteLine("Recieved...");
for (int i = 0; i < k-1; i++)
{
Console.Write(Convert.ToChar(b[i]));
cc = Convert.ToChar(b[i]);
test += cc.ToString();
}
switch (test)
{
case "1":
break;
}
ASCIIEncoding asen=new ASCIIEncoding();
s.Send(asen.GetBytes("The string was recieved by the server."));
Console.WriteLine("\nSent Acknowledgement");
/* clean up */
goto m;
s.Close();
myList.Stop();
Console.ReadLine();
}
catch (Exception e) {
Console.WriteLine("Error..... " + e.StackTrace);
}
}
}
- Tut
Console.WriteLine("Recieved...");
gedruckt? - Einfach nur neugierig, warum Sie nicht wählen gehen Sie mit einem SOAP-Ansatz, performance?
- Ich habe die exakt gleiche app (c# server senden, Datei-listings zu android). Ich habe die Quelle aber ich habe aufgehört daran zu arbeiten eine Weile her. Wenn ich nach Hause von der Arbeit poste ich es für Sie (wenn Sie noch nicht die Antwort gefunden, und die mine noch funktioniert).
- ja, es funktioniert
- Ich glaube nicht, dass der SEIFE, fand gerade einige tutorials und folgte Ihnen
- Das wäre toll, vielen Dank, wir freuen uns auf Sie!
- Tun
Log.d("TCP", "C: Sent.");
undConsole.WriteLine("\nSent Acknowledgement");
geschickt bekommen? Wo wird es aufhören zu schreiben? - Ich denke, Konsole.WriteLine("\nSent Bestätigung"); ist eigentlich nicht zu bekommen versandt, sowie Log.d("TCP", "C: Gesendet.");. Ich tippe auf eine Taste auf dem Handy-Bildschirm und stucks im Zustand "gedrückt", bis ich in der Nähe der server-app.
- Könntest du bitte posten Sie Ihre app, die Sie erwähnt? Ich wäre sehr dankbar.
- Sicher!!! Gib mir ein bisschen. Ich habe gerade nach Hause, und ich will durch meinen code und stellen Sie sicher, es funktioniert immer noch
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ok, ich fand die Lösung für Ihr problem.
In der c# - server, auf dem Sie senden Sie den text:
Stellen Sie sicher, schließen Sie die Steckdose hier, nachdem Sie senden Sie die Daten. thats, warum Ihre app hängen würde. ES war warten auf weitere Eingaben durch den server
Auch ändern, um dies in Java, wo Sie erhalten
Bemerkt, wie du tust 2 readInputs in dieser Schleife. Die while-Anweisung hat eine.. und die Einstellung der text nicht ein.. so sind Sie im wesentlichen versucht zu Lesen, 2 Linien während einer Schleife. Ändern, was ich oben geschrieben Update, das wird
Vermeiden NetworkOnMainThreadException, die Sie benötigen, um ausführen die Mitteilung code in einem neuen thread.
In den Android-client:
Danke für Sie code-Beispiel!
Nur zur info:
benötigen Sie folgende Berechtigung setzen: