【发布时间】:2017-05-09 15:19:04
【问题描述】:
我已经研究这个问题有一段时间了。我有基本概念,现在尝试实现 ASP.NET 和 android 之间的套接字通信。
我正在使用基本的窗口System.Net.Sockets 来解决这个问题。当我尝试逐行调试我的应用程序时,我得到了一个连接,这告诉我我的服务器正在工作,但问题是 C# 行卡在sender.Receive(bytes)。
这是我用于 TCPServer 的 android 端服务器代码
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);
}
}
这就是我从我的主要活动中调用它的方式,目前使用一个简单的按钮来启动服务器以像这样进行监听
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 端的文本框也没有更新收到的任何内容。
【问题讨论】:
标签: c# android asp.net sockets