我一直在调查这个问题一段时间了。我有基本的概念,现在试图实现ASP.NET和Android之间的套接字通信。 我正在使用基本窗口System.Net.Sockets
来解决这个问题。当我尝试逐行调试我的应用程序时,我得到一个连接,它告诉我的服务器正在工作,但问题在于C#行卡住在sender.Receive(bytes)
。C#(ASP.NET)通过套接字进行android通信
这是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);
}
}
我的Android端服务器代码这是我目前正在使用一个简单的按钮来启动服务器监听这样
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();
}
});
把它从我的主要活动现在至于C#或ASP.NET,我刚刚在webforms页面上添加了一个简单的按钮来测试事情,这是该代码
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);
,我不知道该怎么做,因为你可以看到我正在尝试从android客户端发送一些响应。这就像它被卡在这条线等待响应,它永远不会收到此外,android侧的文本框没有更新任何接收到的。