我想使用UDP套接字在Android的,在这里我把我的字符串从Android模拟器,并接收通过电脑我的Java程序,但我的Java程序不会收到任何东西,虽然当我用Java程序的客户端和服务器(我做了两个不同的Java程序),它的工作。
这是我的Android主要活动:
公共类首先扩展活动{
按钮B;
@覆盖
公共无效的onCreate(包savedInstanceState){
super.onCreate(savedInstanceState);
的setContentView(R.layout.main);
B =(按钮)findViewById(R.id.button1);
b.setOnClickListener(新View.OnClickListener(){
公共无效的onClick(视图v){
// TODO自动生成方法存根
线程t =新主题(新二());
t.start();
}
});
下面是我的第二类机器人:
公共类二实现Runnable {
第二()
{
跑();
}
公共无效的run(){
// TODO自动生成方法存根
尝试 {
字符串messageStr =你好Android的!;
INT SERVER_PORT = 9876;
DatagramSocket的S =新的DatagramSocket();
InetAddress类本地= InetAddress.getByName(127.0.0.1);
INT msg_length = messageStr.length();
byte []的消息= messageStr.getBytes();
DatagramPacket类P =新的DatagramPacket(消息,msg_length,地方,
SERVER_PORT);
s.send(对);
}赶上(例外五){
}
}
}
这是在PC上我的Java code:
公共静态无效的主要(字符串的args [])抛出异常
{
DatagramSocket类的ServerSocket =新的DatagramSocket(9876);
byte []的receiveData =新的字节[1024];
byte []的送出数据=新的字节[1024];
而(真)
{
DatagramPacket类receivePacket =新的DatagramPacket(receiveData,receiveData.length);
serverSocket.receive(receivePacket);
串句=新的String(receivePacket.getData(),0,receivePacket.getLength());
InetAddress类ip地址= receivePacket.getAddress();
INT端口= receivePacket.getPort();
的System.out.println(收到消息+句子++ ip地址++端口);
}
}
解决方案
在你的Android仿真(和Android设备),127.0.0.1意味着Android的模拟机,而不是PC主机。您可以在10.0.2.2
I am trying to use UDP sockets in a android, here I send my string from android emulator and receive that by my Java program on PC, but my Java program does not receive anything, although when I used Java program as both client and server (I made two different Java programs) it worked.
This is my android main activity :
public class First extends Activity {
Button b;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
b = (Button) findViewById(R.id.button1);
b.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
Thread t = new Thread(new Second());
t.start();
}
});
Here is my second class in android :
public class Second implements Runnable {
Second()
{
run();
}
public void run() {
// TODO Auto-generated method stub
try {
String messageStr = "Hello Android!";
int server_port = 9876;
DatagramSocket s = new DatagramSocket();
InetAddress local = InetAddress.getByName("127.0.0.1");
int msg_length = messageStr.length();
byte[] message = messageStr.getBytes();
DatagramPacket p = new DatagramPacket(message, msg_length, local,
server_port);
s.send(p);
} catch (Exception e) {
}
}
}
This is my Java code on PC:
public static void main(String args[]) throws Exception
{
DatagramSocket serverSocket = new DatagramSocket(9876);
byte[] receiveData = new byte[1024];
byte[] sendData = new byte[1024];
while(true)
{
DatagramPacket receivePacket = new DatagramPacket(receiveData,receiveData.length);
serverSocket.receive(receivePacket);
String sentence = new String(receivePacket.getData(),0,receivePacket.getLength());
InetAddress IPAddress = receivePacket.getAddress();
int port = receivePacket.getPort();
System.out.println("MESSAGE RECEIVED "+sentence+" "+IPAddress+" "+port);
}
}
解决方案
On your Android emulation (and Android device), 127.0.0.1 means the Android emulation machine, not the host PC. You can access your host at 10.0.2.2