[英]Android: cannot create socket
在android中创建套接字时遇到问题。 我正在使用LibGDX。
@Override
public void create() {
System.out.println("Enter IP adress.");
ip = "78.61.65.198";
System.out.println("Connecting...");
socket = connection(PORT, ip);
System.out.println("Setting up InputStream");
reader = reader(socket);
System.out.println("Setting up OutputStream");
output = output(socket);
while (socket.isConnected()) {
output.println("0;" + Gdx.input.getAccelerometerX() + ";" + Gdx.input.getAccelerometerY());
}
}
public static Socket connection(int port, String ip) {
try {
return new Socket(InetAddress.getByName(ip), port);
} catch (UnknownHostException e) {
e.printStackTrace();
System.out.println("Unknown host...");
return null;
} catch (IOException e) {
e.printStackTrace();
System.out.println("Failed to connect...");
return null;
}
}
public static BufferedReader reader(Socket socket) {
try {
return new BufferedReader(new InputStreamReader(socket.getInputStream()));
} catch (IOException e) {
System.err.println("Couldn't get inputStream...");
e.printStackTrace();
return null;
}
}
public static PrintStream output(Socket socket) {
try {
return new PrintStream(socket.getOutputStream());
} catch (IOException e) {
e.printStackTrace();
System.err.println("Couldn't get outputStream");
return null;
}
}
服务器:
@Override
public void create() {
System.out.println("Creating server...");
server = hostServer(PORT);
System.out.println("Waiting for Client 1...");
client1 = waitForConnections(server);
System.out.println("Setting up input/output for client 1...");
client1Input = reader(client1);
client1Output = output(client1);
setScreen(new gameScreen(this));
}
public static ServerSocket hostServer(int port){
try {
return new ServerSocket(port);
} catch (IOException e) {
e.printStackTrace();
System.err.println("Failed to host server!");
return null;
}
}
public static BufferedReader reader(Socket socket){
try {
return new BufferedReader(new InputStreamReader(socket.getInputStream()));
} catch (IOException e) {
e.printStackTrace();
System.err.println("Failed to get input stream!");
return null;
}
}
public static PrintStream output(Socket socket){
try {
return new PrintStream(socket.getOutputStream());
} catch (IOException e) {
e.printStackTrace();
System.err.println("Failed to create output stream!");
return null;
}
}
public static Socket waitForConnections(ServerSocket server){
try {
return server.accept();
} catch (IOException e) {
e.printStackTrace();
System.err.println("Failed to accept connection!");
return null;
}
}
当我使用桌面项目执行此操作时,它起作用,但是当我使用android项目执行此操作时,它不起作用。
让我知道是否有人遇到类似问题或找到了解决方案。
假设PC和Android设备都连接到同一LAN(连接到同一路由器),则应尝试使用服务器的内部 IP地址(通常看起来是:10.0.0.X或192.168.XX),可以通过在Windows PC上的命令行上运行ipconfig
命令或在Linux / MAC上的ifconfig
来找到。 如果您的PC和Android设备连接到不同的网络,则应像在示例中一样使用服务器的外部 IP地址。 如果是后者,则还应该将使用端口(1234)转发到路由器中的PC。
UI线程/活动中是否建立了客户端网络连接? 如果是这样,则网络连接应在单独的线程中建立,例如。 AsynTask用于较短的操作,而服务则用于较长的流操作。 http://developer.android.com/training/basics/network-ops/connecting.html#AsyncTask
当服务器在您的PC上启动时,只要您尝试连接到localhost / 127.0.0.1,就无法从PC以外的其他设备进行连接。 仅当在PC上将应用程序作为桌面应用程序运行时,连接才有效,因为客户端和服务器位于同一主机上。 对于其他客户端,您需要连接到PC的本地LAN IP地址。 当您尝试从手机连接到localhost / 127.0.0.1时,它正在寻找在手机上运行的服务器,事实并非如此。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.