0
我遇到问题,我不知道是否有可能。从服务器(Java应用程序)到Android应用程序的套接字
我有一个Android应用程序是客户端套接字。
这是为了在Android应用程序将消息发送到服务器的代码:
private class SendMessage extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... params) {
try {
System.out.println("envia mensaje");
client = new Socket("ip of server", 4444); // connect to the server
printwriter = new PrintWriter(client.getOutputStream(), true);
printwriter.write(messsage); // write the message to output stream
printwriter.flush();
printwriter.close();
client.close(); // closing the connection
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}
在同一时间,在Android应用程序,一个插座在4445端口创建:
private class SocketServerThread extends Thread {
static final int SocketServerPORT = 4445;
int count = 0;
@Override
public void run() {
try {
serverSocket = new ServerSocket(SocketServerPORT);
SlimpleTextClientActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
System.out.println("I'm waiting here: "
+ serverSocket.getLocalPort());
}
});
while (true) {
Socket socket = serverSocket.accept();
count++;
message += "#" + count + " from " + socket.getInetAddress()
+ ":" + socket.getPort() + "\n";
SlimpleTextClientActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
System.out.println(message);
}
});
/*SocketServerReplyThread socketServerReplyThread = new SocketServerReplyThread(
socket, count);
socketServerReplyThread.run();*/
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
而且这是服务器代码,它在4444端口创建一个套接字:
public static void main(String[] args) {
try {
serverSocket = new ServerSocket(4444); // Server socket
} catch (IOException e) {
System.out.println("Could not listen on port: 4444");
}
System.out.println("Server started. Listening to the port 4444");
while (true) {
try {
clientSocket = serverSocket.accept(); // accept the client connection
inputStreamReader = new InputStreamReader(clientSocket.getInputStream());
bufferedReader = new BufferedReader(inputStreamReader); // get the client message
message = bufferedReader.readLine();
System.out.println("Dirección entrante"+clientSocket.getInetAddress());
//System.out.println("Dirección entrante2"+clientSocket.get());
System.out.println(message);
ip_a = clientSocket.getInetAddress().toString().substring(clientSocket.getInetAddress().toString().indexOf("/")+1, clientSocket.getInetAddress().toString().length());
//message.substring(message.indexOf(":")+1, message.length()).trim();
System.out.println("realiza conexión a ip:#"+ip_a+"#");
messsage = "enviado desde el servidor"; // get the text message on the text field
SendMessage(ip_a);
inputStreamReader.close();
clientSocket.close();
} catch (IOException ex) {
System.out.println("Problem in message reading");
}
}
}
这个工作正常,但我想发送一个mes从服务器到通过套接字所具有的IP的Android设备。
我尝试使用clientSocket.getInetAddress()和clientSocket.getRemoteSocketAddress(),但无法正常工作。我在4445端口的Android应用程序中创建了一个套接字,但服务器无法连接到Android应用程序的套接字。
你能帮我吗?
在此先感谢
你为什么要创建两台服务器?请解释为你的整个设置和目标对我来说不清楚。 – greenapps 2014-11-06 12:18:45
我希望2个应用程序可以通过服务器java应用程序进行通信。 – tiomelenas 2014-11-06 14:45:22
好的。但请花时间来解释整个场景。我需要从代码中发现吗? – greenapps 2014-11-06 14:50:17