首页 > 其他分享 >Android实现UDP通信

Android实现UDP通信

时间:2022-11-05 09:45:39浏览次数:73  
标签:UDP DatagramPacket socket 通信 packet new Android data data2

TCP和UDP的不同

上次我们讲的是TCP的socket,他们之间的不同在于,tcp要等待客户端的接入,然后获得 客户端socket然后进行IO操作,udp直接传送数据即可

 

 图片来源:面试官:说说UDP和TCP的区别及应用场景 - 知乎 (zhihu.com)

UDPserver的Main.java

DatagramSocket socket = new DatagramSocket(12345);
                // 2.创建数据报,用于接收客户端发送的数据
                byte[] data = new byte[1024];// 创建字节数组,指定接收的数据包的大小
                DatagramPacket packet = new DatagramPacket(data, data.length);
                System.out.println("****服务器端已经启动,等待客户端发送数据");
                socket.receive(packet);// 此方法在接收到数据报之前会一直阻塞
                // 4.读取数据
                String info = new String(data, 0, packet.getLength());
                System.out.println("我是服务器,客户端说:" + info);

                InetAddress address = packet.getAddress();
                int port = packet.getPort();
                byte[] data2 = "欢迎您!".getBytes();
                // 2.创建数据报,包含响应的数据信息
                DatagramPacket packet2 = new DatagramPacket(data2, data2.length, address, port);
                // 3.响应客户端
                socket.send(packet2);
                // 4.关闭资源
                socket.close();

Android的MainActivity

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        new Thread() {
            @Override
            public void run() {
                try {
                    udpClient();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }.start();
    }
    void udpClient() throws IOException {
        InetAddress address = InetAddress.getByName("10.32.108.182");
        int port = 12345;
        byte[] data = "the message you want to send to server".getBytes();
        // 2.创建数据报,包含发送的数据信息
        DatagramPacket packet = new DatagramPacket(data, data.length, address, port);
        // 3.创建DatagramSocket对象
        DatagramSocket socket = new DatagramSocket();
        // 4.向服务器端发送数据报
        socket.send(packet);

        byte[] data2 = new byte[1024];
        DatagramPacket packet2 = new DatagramPacket(data2, data2.length);
        // 2.接收服务器响应的数据
        socket.receive(packet2);
        // 3.读取数据
        String reply = new String(data2, 0, packet2.getLength());
        Log.e("tag","我是客户端,服务器说:" + reply);
        // 4.关闭资源
        socket.close();
    }
}

权限

 <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

GitHub地址 下载前给star

标签:UDP,DatagramPacket,socket,通信,packet,new,Android,data,data2
From: https://www.cnblogs.com/Frank-dev-blog/p/16859671.html

相关文章

  • 进程间通信
    进程通信的目的数据传输:一个进程需要将它的数据发送给另一个进程资源共享:多个进程之间共享同样的资源。通知事件:一个进程需要向另一个或一组进程发送消息,通知它(它们)......
  • Android 报错:error: too many padding sections on bottom border
     在androidstudio点击png文件修改,把多条黑边改成2条黑边即可 Android报错:error:toomanypaddingsectionsonbottomborder 一、发生错误【我以为我做......
  • 【Android Gradle 插件】自定义 Gradle 插件优化图片 ③ ( 识别 png 图片中的 alpha
    文章目录​​一、识别png图片中的alpha通道信息​​​​1、png图片的文件头信息​​​​2、png图片的数据块​​​​3、png图片的IHDR类型数据块​​​​4、IHDR......
  • Android 嵌套布局简析
    前言嵌套布局是事件分发的衍生内容,理解了嵌套布局的实现方式,Md的很多效果都是毛毛雨了​​原文地址进入​​Uml时序图形嵌套布局实现方式,以及5.0中与嵌套布局有关联的......
  • Android 8.0 + Service开启方式兼容处理
    Android8.0+,对后台服务进行了限制了。如果依然采用之前startService()方式。会导致问题。前后台服务的一些区别:类别区别应用前台服务会在通知一栏显示ONGOING的Notifi......
  • EasyCVR国标GB28181协议接入下的TCP和UDP模式说明及差异
    有用户在使用我们的平台时,经常会出现对于端口的疑问,同时也不了解端口的差别。今天我们来解释说明下EasyCVR平台关于国标GB28181协议接入下的TCP和UDP模式的说明及差异。......
  • UDP、TCP
    /**UDP协议:*1.面向无连接,不可靠协议*2.数据会被分包,数据限制在64k*3.不需要建立连接,速度快*比如:聊天数据共享,视频会议时数据传输.*TCP协议:*1.必须建......
  • 从android 谈重构
    什麽是重构可以运作的程式跟可以维护的程式之间,还有一道难以言说的鸿沟。一个程式设计之初,是用来解决特定问题。就像在前面章节的学习中,我们也已......
  • Android的BLE广播数据包解析---Android系列, 蓝牙技术(含BLE)
      一、引言理解和分析这个数据包结构(这里面也涉及广播间隔时间的设置,设备广播数据间隔设置长了,会影响设备被发现的效率;设置短时,又响应功耗)。我们所说的BLE设备,其实......
  • Android TextView 设置内容可滚动
    前言开发中scrollBar用的最多的地方就是在内容超过显示区域后,可以手动上下左右滑动来查看解决方案比较多。方案一使用一个可滑动的组件ScroolView包裹用于在内容超过显示......