用Android实现UDP通信和Java实现TCP通信,也就是我们所做过的多人聊天类似。现在我们新建一个Java Project,名字为“UDPServer” 来作为服务器端,新建一个Android Application Project来作为客户端,这样我的手机可通过安装app来实现手机和电脑之间的通信。
客户端
首先新建一个Android Application Project,作为客户端,我取的名字是UDPtest
新建工程大家都会的吧,不会的可以参考我的前面的博客创建Android Activity,设计简单的界面,一个输入框EditText和一个按钮Button,我的简单设计就是下面的样子了,
现在简单的界面已经做好啦,开始码代码进行UDP通信啦。
在MainActivity.Java中的onCreate方法中添加如下的代码
代码简单解释:
先获取界面上的组件,并且将按钮组件添加监听器,实现的功能就是获取用户输入框中的内容并且传入到发送消息的函数sendMsg(String msg)中去。
这里需要注意的是需要将发送消息的函数写在线程中去,因为Android不允许在子线程中进行UI操作。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//获取界面上的组件
final EditText inputString = (EditText)this.findViewById(R.id.inputString);
Button btn_OK = (Button)this.findViewById(R.id.btn_OK);
//给组件加上监听器
btn_OK.setOnClickListener(new OnClickListener(){
String input;
@Override
public void onClick(View v) {
Log.i("button", "OK...");
input = inputString.getText().toString();
new Thread(){public void run(){
sendMsg(input);
}}.start();
}
});
}
发送消息的函数sendMsg(String msg)
如果对UDP通信过程不是很清楚的童鞋们可以看看我的另一篇博客Java实现UDP通信过程
public void sendMsg(String msg){
Log.i("client send","...");
try {
DatagramSocket socket = new DatagramSocket(0);
//目标地址
InetAddress host = InetAddress.getByName("192.168.31.9");
//指定包要发送的目的地
byte[] data=msg.getBytes("UTF-8");//这里指定UTF-8可以得到中文收发
DatagramPacket request =new DatagramPacket(data,data.length, host, 8081);
//发送
socket.send(request);
Log.i("client send","success");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
Log.i("Error", "...");
}
}
客户端已经好啦,现在就是服务器端的事情了
服务器端
注意:服务器端写在Java Project下。
为了简便,这里没有写出界面。
以下为UDPSever的入口main函数中的内容:
System.out.println("udp recive server start ....");
DatagramSocket socket;
try {
//指定端口号
socket = new DatagramSocket(8081);
while(true){
byte[] tong=new byte[10];
DatagramPacket request = new DatagramPacket(tong, 10);
//程序很可能会阻塞在这里等待接收消息
socket.receive(request);
String s=new String(tong,"UTF-8");
System.out.println("收到消息: "+s);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
现在客户端和服务器端已经准备就需啦,现在开启测试
测试结果
开启测试之前,Android端需要添加一个权限,不然socket创建会失败,找到Android端的AndroidMainifest.xml文件,点击进去,在下方找到Permissions窗口,点击add–>use Permission–>OK–>在右边的Name下拉框中找到android.permission.INTERNET进行添加就可以了。
这个权限需要在
第一步先运行服务器端
第二步运行Android项目,这时在手机上我们得到了一个客户端的app,界面如下:
现在我们输入一行hello,
再输入你好