Ich habe seit einiger Zeit in dieser Angelegenheit untersucht. Ich habe das Grundkonzept und versuche jetzt, die Socket-Kommunikation zwischen ASP.NET und Android zu implementieren. Ich benutze die grundlegenden Windows System.Net.Sockets
, um dies auszuarbeiten. Ich bekomme eine Verbindung, während ich versuche, meine Anwendung Zeile für Zeile zu debuggen, die sagt, dass mein Server funktioniert, aber das Problem ist, dass die C# -Leitung bei sender.Receive(bytes)
stecken bleibt.C# (ASP.NET) zu Android-Kommunikation über Sockets
Das ist mein android Seite Server-Code für TCPServer
public class TCPServer extends Thread {
public static final int SERVER_PORT = 11000;
private boolean running = false;
private PrintWriter mOut;
private OnMessageReceived messageListener;
public TCPServer(OnMessageReceived messageListener)
{
this.messageListener = messageListener;
}
public void sendMessage(String message)
{
if(mOut != null && !mOut.checkError())
{
mOut.println(message);
mOut.flush();
}
}
@Override
public void run()
{
super.run();
running=true;
try {
ServerSocket serverSocket = new ServerSocket(SERVER_PORT);
Socket client = serverSocket.accept();
try {
//sends the message to the client
mOut = new PrintWriter(new BufferedWriter(new OutputStreamWriter(client.getOutputStream())), true);
//read the message received from client
BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
//in this while we wait to receive messages from client (it's an infinite loop)
//this while it's like a listener for messages
while (running) {
String message = in.readLine();
if (message != null && messageListener != null) {
messageListener.messageReceived(message);
sendMessage("OK Message is received here");
//the line above and below is also not helping me with my problem
mOut.println("OK: FROM ACOM");
}
}
}
catch (Exception e)
{
e.getMessage();
}
finally {
client.close();
}
}
catch (Exception e)
{
e.getMessage();
}
}
public interface OnMessageReceived {
public void messageReceived(String message);
}
}
Dies ist, wie ich es von meiner Haupttätigkeit nennen derzeit eine einfache Schaltfläche mit dem Server zu initiieren, wie dies
btnStartServer.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(context,"Starting the server",Toast.LENGTH_LONG).show();
TCPServer tcpServer = new TCPServer(new TCPServer.OnMessageReceived() {
@Override
public void messageReceived(String message) {
txtMessageReceived.setText(message);
}
});
tcpServer.start();
}
});
hören Jetzt für die C# oder ASP.NET Ich habe gerade eine einfache Schaltfläche auf Webforms Seite hinzugefügt, um Dinge zu testen, und das ist der Code dafür
IPAddress ipAddress;
IPEndPoint remoteEP;
Socket sender;
byte[] bytes;
private void setUpSockets()
{
bytes = new byte[1024];
try
{
ipAddress = IPAddress.Parse("192.168.0.102");
remoteEP = new IPEndPoint(ipAddress, 11000);
sender = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
try
{
sender.Connect(remoteEP);
byte[] msg = Encoding.ASCII.GetBytes("This is some Test <EOF>");
int byteSent = sender.Send(msg);
int byteRec = sender.Receive(bytes);
string messageRec = Encoding.ASCII.GetString(bytes, 0, byteRec);
sender.Shutdown(SocketShutdown.Both);
sender.Close();
}
catch (Exception e)
{
string exception = e.Message;
}
}
catch (Exception m)
{
string exception = m.Message;
}
}
protected void Button1_Click(object sender, EventArgs e)
{
setUpSockets();
}
Jetzt teste ich es erst, bevor ich es zu etwas sinnvollem hinzufüge, aber ich stecke fest in diesem int byteRec = sender.Receive(bytes);
und ich bin mir nicht sicher, was ich tun soll, denn wie Sie sehen können, versuche ich auch eine Antwort vom Android-Client zu senden. Es ist so, als würde es bei dieser Zeile hängenbleiben und auf eine Antwort warten, die es nie empfängt. Außerdem wird das Textfeld auf der Android-Seite nicht aktualisiert.