我正在开发一个 Android 应用程序。有一个设备作为服务器。客户端设备可以连接到服务器设备。我想通过局域网来做。我不确定这是最好的方法,但我开始进行基于套接字的通信。
这是我的服务器线程:
@Override
public void run() {
Socket socket = null;
try {
serverSocket = new ServerSocket(7777);
while (!Thread.currentThread().isInterrupted()) {
try {
socket = serverSocket.accept();
} catch (IOException e) {
e.printStackTrace();
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
我还有另一个线程用于通信...
现在,这是我的客户端线程:
public void run() {
try {
InetAddress serverAddress = InetAddress.getByName("10.0.2.2");
socket = new Socket(serverAddress, 7777);
writer = new PrintWriter(new BufferedWriter(
new OutputStreamWriter(socket.getOutputStream())), true);
writer.println("Hello!");
writer.flush();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
问题是当客户端尝试连接到服务器时连接会超时。
编辑:权限:
<uses-permission
android:name="android.permission.INTERNET"/>
<uses-permission
android:name="android.permission.ACCESS_NETWORK_STATE"/>
最佳答案
终于解决了。我不再用模拟器吸吮。我有 2 个 Android 设备。我将下一个代码添加到服务器:
public static String getIPAddress() {
try {
List<NetworkInterface> interfaces = Collections.list(
NetworkInterface.getNetworkInterfaces());
for (NetworkInterface networkInterface : interfaces) {
List<InetAddress> addresses = Collections.list(
networkInterface.getInetAddresses());
for (InetAddress inetAddress : addresses) {
if (!inetAddress.isLoopbackAddress()) {
String sAddress = inetAddress.getHostAddress().toUpperCase();
if (InetAddressUtils.isIPv4Address(sAddress)) {
return sAddress;
} else {
int delim = sAddress.indexOf('%');
return delim < 0 ? sAddress : sAddress.substring(0,
delim);
}
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
return "";
}
现在我可以获得服务器地址:192.168.1.X。我把它放在服务器设备上的 TextView 上,客户端必须输入此 ip 才能连接到服务器。对我来说足够了,因为我想在本地网络上使用它。
关于java - 客户端无法连接到服务器套接字 - Android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22942939/