标签:网络编程 package android import public
1.使用UDP协议传输数据
UDP协议不可靠,数据包发送出去之后无法确定是否被接收方接收到
在Java里写好Server如下
package com.umgsai.server;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.util.Calendar;
import java.util.Date;
public class Server {
static Date date ;
public static void main(String[] args) {
while (true) {
try {
// 创建一个DatagramSocket对象,并指定监听的端口号
DatagramSocket socket = new DatagramSocket(4572);
byte data[] = new byte[1024];
// 创建一个空的DatagramPacket对象
DatagramPacket packet = new DatagramPacket(data, data.length);
// 使用receive方法接收客户端所发送的数据
socket.receive(packet);
String result = new String(packet.getData(),
packet.getOffset(), packet.getLength());
date = Calendar.getInstance().getTime();
System.out.println(date);
System.out.println("result--->" + result);
socket.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}客户端在Android里面编写
界面activity_main.xml
<Button android:id="@+id/sendMessage" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="发送消息" />
Android4.0+操作系统中连接网络的操作不能在主线程中进行
public class MainActivity extends Activity {
private Button sendMessage = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
sendMessage = (Button) findViewById(R.id.sendMessage);
sendMessage.setOnClickListener(new clientListener());
}
class clientListener implements OnClickListener{
@Override
public void onClick(View v) {
HandlerThread handlerThread = new HandlerThread("handler_Thread");
handlerThread.start();
ClientHandler clientHandler = new ClientHandler(handlerThread.getLooper());
Message msg = clientHandler.obtainMessage();
Bundle bundle = new Bundle();
msg.setData(bundle);
// 将msg发送到目标对象,即生成msg对象的Handler对象
msg.sendToTarget();
}
}
class ClientHandler extends Handler {
public ClientHandler() {
}
public ClientHandler(Looper looper) {
super(looper);
}
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
Bundle bundle = msg.getData();
try {
// 首先创建一个DatagramSocket对象
DatagramSocket socket = new DatagramSocket(4572);
// 创建一个InetAddree
InetAddress serverAddress = InetAddress.getByName("192.168.77.215");
String str = "hello";
byte data[] = str.getBytes();
// 创建一个DatagramPacket对象,并指定要讲这个数据包发送到网络当中的哪个地址,以及端口号
DatagramPacket packet = new DatagramPacket(data,
data.length, serverAddress, 4572);
// 调用socket对象的send方法,发送数据
socket.send(packet);
socket.close();
Toast.makeText(MainActivity.this, "数据已发送", Toast.LENGTH_SHORT).show();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
}
}客户端需要的权限
<uses-permission android:name="android.permission.INTERNET" />
本文出自 “阿凡达” 博客,请务必保留此出处http://shamrock.blog.51cto.com/2079212/1582887
标签:网络编程 package android import public
原文地址:http://shamrock.blog.51cto.com/2079212/1582887