Java 客户端无法连接到服务器套接字-Android
我正在开发一个Android应用程序。有一个设备作为服务器。客户端设备可以连接到服务器设备。我想通过局域网来做。我不确定这是不是最好的方式,但我开始做一个基于套接字的通信 这是我的服务器线程:Java 客户端无法连接到服务器套接字-Android,java,android,sockets,timeout,serversocket,Java,Android,Sockets,Timeout,Serversocket,我正在开发一个Android应用程序。有一个设备作为服务器。客户端设备可以连接到服务器设备。我想通过局域网来做。我不确定这是不是最好的方式,但我开始做一个基于套接字的通信 这是我的服务器线程: @Override public void run() { Socket socket = null; try { serverSocket = new ServerSocket(7777); while (!Thread.currentThread().i
@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"/>
我终于解决了这个问题。我不再用模拟器吮吸了。我有两个安卓设备。我向服务器添加了下一个代码:
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 "";
}
public静态字符串getIPAddress(){
试一试{
列表接口=Collections.List(
NetworkInterface.getNetworkInterfaces());
用于(网络接口网络接口:接口){
列表地址=Collections.List(
networkInterface.getInetAddresses());
用于(InetAddress InetAddress:addresses){
如果(!inetAddress.isLoopbackAddress()){
字符串sAddress=inetAddress.getHostAddress().toUpperCase();
if(InetAddressUtils.isIPv4Address(sAddress)){
返回鞍;
}否则{
int delim=sAddress.indexOf('%');
返回delim<0?鞍形应力:鞍形应力。子串(0,
德利姆);
}
}
}
}
}捕获(例外e){
e、 printStackTrace();
}
返回“”;
}
现在我可以得到服务器地址了,它看起来像:192.168.1.X。我把它放在服务器设备上的文本视图中,客户端必须输入这个ip才能连接到服务器。这对我来说已经足够了,因为我想在本地网络上使用它。你能通过telnet连接到10.0.2.2:7777吗?如果知道服务器地址IP,则不需要使用get ByName()。你可以连接新的插座(“10.0.2.2”,7777)。我不能。我收到以下消息:“连接到10.0.2.2…无法打开到主机的连接,端口7777:连接失败”