【发布时间】:2015-01-19 23:10:45
【问题描述】:
服务器部分(Android)
new Thread(new Runnable() {
public void run() {
DatagramSocket s;
try {
s = new DatagramSocket();
s.send(new DatagramPacket("aaa".getBytes(), 3, InetAddress.getByName(/* Server ip address*/), 11720));
s.close();
} catch (UnknownHostException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
while(true)
{
try {
ServerSocket ssocket = new ServerSocket(11720);
ssocket.accept(); // Cannot make connection!!
Toast.makeText(a, "Who's coming", Toast.LENGTH_SHORT).show();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}).start();
客户端代码(Java、PC)
public static void main(String[] args) {
try {
DatagramSocket ds = new DatagramSocket(11720);
DatagramPacket dp = new DatagramPacket(new byte[1024], 1024);
ds.close();
try {
ds.receive(dp);
// ds.send(new DatagramPacket("aaaa".getBytes(), 4, dp.getAddress(), 11720));
Socket socket = new Socket(dp.getAddress(), 11720); // Cannot make connection!!
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
我想在 android 服务器和 pc 客户端之间建立连接。 首先android向pc发送一个数据包。 我认为服务器可以知道使用这个数据包,所以我使用函数 getAddress()。
然后android打开socket使用端口号11720和pc尝试连接android。 但它无法连接。
为什么这段代码无法建立连接?
哦,我只想知道如何从电脑连接到手机。 所以我改变了pc和android代码。
首先,我的目标是使用静态端口 (11720) 连接到 android。 但是使用 LTE 时无法使用静态端口进行连接。
所以我使用简单的程序检查套接字信息。
这是在电脑里。
public static void main(String[] args) {
try {
DatagramSocket ds = new DatagramSocket(11720);
DatagramPacket dp = new DatagramPacket(new byte[1024], 1024);
while (true)
{
ds.receive(dp);
System.out.println(dp.getSocketAddress());
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
这是在 android 中。
new Thread(new Runnable() {
public void run() {
try {
DatagramSocket s = new DatagramSocket(11720);
while(true)
{
s.send(new DatagramPacket("aaa".getBytes(), 3, InetAddress.getByName("143.248.55.131" /* Server address */), 11720));
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}).start();
我使用 WiFi 和 LTE 执行程序。 结果是
/143.248.56.118:11720 /143.248.56.118:11720
/143.248.56.118:11720
/117.111.7.124:35645 /117.111.7.124:35645
/117.111.7.124:35645
使用 LTE 时,socket 的端口号会改变。 所以我不能使用静态端口号发送数据包。
我该如何解决这个问题?
【问题讨论】:
标签: java android sockets tcp connection