android socket udp,Android socket通过UDP的方式发送,接收数据

Android socket通过UDP的方式来发送和接收数据,从而进行手机间的通信。

发送方:

public class SendUtils {

private static InetAddress mAddress;

private static DatagramSocket socket = null;

private static String ip = "255.255.255.255"; //发送给整个局域网

private static final int SendPort = 9999; //发送方和接收方需要端口一致

public static void SendUtils (final Context context, final String content) {

//初始化socket

try {

socket = new DatagramSocket();

} catch (SocketException e) {

e.printStackTrace();

}

try {

mAddress = InetAddress.getByName(ip);

} catch (UnknownHostException e) {

e.printStackTrace();

}

//创建线程发送信息

new Thread() {

private byte[] sendBuf;

public void run() {

try {

sendBuf = content.getBytes("utf-8");

} catch (UnsupportedEncodingException e) {

e.printStackTrace();

}

DatagramPacket recvPacket1 = new DatagramPacket(sendBuf, sendBuf.length, mAddress, SendPort);

try {

socket.send(recvPacket1);

socket.close();

Log.e("zziafyc", "已将内容发送给了AIUI端内容为:" + content);

} catch (IOException e) {

e.printStackTrace();

}

}

}.start();

}

}

接收端:

public class ReceiveUtils {

private DatagramSocket socket;

private static final int PhonePort = 9999;//手机端口号

private DatagramPacket packet;

private volatile boolean stopReceiver;

String filePath = "/sdcard/AIUI/devices.txt";

private void receiveMessage() {

new Thread() {

public void run() {

try {

socket = new DatagramSocket(PhonePort);

} catch (SocketException e) {

e.printStackTrace();

}

byte[] receBuf = new byte[1024];

packet = new DatagramPacket(receBuf, receBuf.length);

while (!stopReceiver) {

try {

socket.receive(packet);

String receive = new String(packet.getData(), 0, packet.getLength(), "utf-8");

Log.e("zziafyc", "收到的内容为:" + receive);

} catch (IOException e) {

e.printStackTrace();

}

}

}

}.start();

}

}

边发送边接收:

public class SendAndReceiveUtils {

private static InetAddress mAddress;

private static DatagramSocket socket = null;

private static String ip = "255.255.255.255"; //发送给整个局域网

private static int port = 8899; //发送方和接收方需要端口一致

private static String personIp = "127.0.0.1"; //发送给本机

private static final int personPort = 7070; //发送方和接收方需要端口一致

public static void sendSearchGateWay(Context context, final String content, final String sid, int port) {

//初始化socket

try {

socket = new DatagramSocket();

//设置超时时间

socket.setSoTimeout(5000);

} catch (SocketException e) {

e.printStackTrace();

}

try {

mAddress = InetAddress.getByName(ip);

} catch (UnknownHostException e) {

e.printStackTrace();

}

//创建线程发送信息

new Thread() {

private byte[] sendBuf;

public void run() {

try {

sendBuf = content.getBytes("utf-8");

} catch (Exception e) {

e.printStackTrace();

}

DatagramPacket packet = new DatagramPacket(sendBuf, sendBuf.length, mAddress, port);

try {

//已发送完成

socket.send(packet);

byte[] receive = new byte[1024];

DatagramPacket receivePacket = new DatagramPacket(receive, receive.length);

while (true) {

socket.receive(receivePacket);

String result = new String(receivePacket.getData(), 0, receivePacket.getLength(), "utf-8");

Log.e("result: ", result);

if (!TextUtils.isEmpty(result) && result.contains(sid)) {

break;

}

}

} catch (SocketTimeoutException timeOutException) {

Log.e("result4: ", "开始执行重启");

socket.close();

sendContextToAIUI_person("请先连接网关");

App.getInstance().exit();

RestartAPPTool.restartAPP(context);

} catch (Exception e) {

e.printStackTrace();

}

}

}.start();

}

}

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值