私は今この問題をしばらく見てきました。私は基本的な考え方を持っていて、今はASP.NETとAndroidの間のソケット通信を実装しようとしています。 私は基本的なウィンドウSystem.Net.Sockets
を使用してこれを解決しています。私は私のサーバが動作していることを伝える行ごとにアプリケーションをデバッグしようとしているが、C#の行がsender.Receive(bytes)
になっているという問題がある。C#(ASP.NET)からソケット経由のアンドロイド通信へ
これはこれは私が現在、この
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();
}
});
のように待機するようにサーバーを開始するための簡単なボタンを使用して、私の主な活動からそれを呼び出す方法です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);
}
}
のための私のアンドロイド側サーバコードですさて、C#またはASP.NETの場合は、Webフォームページにシンプルなボタンを追加してテストしました。これはそのコードです。
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();
}
今、私は何か意味のあるものに追加する前にそれをテストしていますが、私はこのint byteRec = sender.Receive(bytes);
に固執しています。私はあなたが見ることができるので、私はアンドロイドクライアントからの応答も送信しようとしているからです。それは、それがアンドロイド側のテキストボックスが受信されたものを更新することはありませんまた、それを受信しない応答を待ってこの行に立ち往生のようです。