zoukankan      html  css  js  c++  java
  • 安卓UDP通信

    功能:

    实现了单次一发一收:

    import java.net.*;
    import java.io.*;
    
    public class udpRecv
    {
        /*
        * 创建UDP传输的接收端
        * 1.建立udp socket服务,因为是要接收数据,必须指明端口号
        * 2,创建数据包,用于存储接收到的数据。方便用数据包对象的方法处理数据
        * 3,使用socket服务的receive方法将接收的数据存储到数据包中
        * 4,通过数据包的方法解析数据包中的数据
        * 5,关闭资源
    
        *抛一个大异常:IOException
        */
        public static void main(String[] args) throws IOException{
            //1,创建udp socket服务
            DatagramSocket ds = new DatagramSocket(10000);
    
            //2,创建数据包
            byte[] buf =new byte[1024];
            DatagramPacket dp =new DatagramPacket(buf,buf.length);
    
            //3,使用接收的方法将数据包存储到数据包中
            ds.receive(dp);//阻塞式
    
            //4.通过数据包对象的方法,解析其中的数据
            String ip = dp.getAddress().getHostAddress();
            int port  = dp.getPort();
            String content = new String(dp.getData(),0,dp.getLength());
            System.out.println(ip+"::" +port+":"+content);
            /*回发给手机数据*/
            //首先获取端口和地址
            InetAddress addr = dp.getAddress();
            String sendStr = "Hello ! 我是服务器";
            byte[] sendBuf;
            sendBuf = sendStr.getBytes("utf-8");//必须转换utf8,否则安卓显示乱码
            DatagramPacket sendPacket 
                = new DatagramPacket(sendBuf , sendBuf.length , addr , port );
    
            ds.send(sendPacket);
            //5关闭资源
            ds.close();
    
            
            
        }
    }
    udpRecv.java

    安卓客户端后台代码:

    package com.simpleclientudp;
    
    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.net.InetAddress;
    import java.net.Socket;
    
    
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.widget.EditText;
    
    
    public class MainActivity extends Activity {
        
        EditText show;
        
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
        
        show = (EditText) findViewById(R.id.show);
        new Thread()
        {
            @Override
            public void run()
            {
                try
                {
                    //1.udpsocket服务对象,使用DatagramSocket创建,可以指明本地IP和端口
                    //当然也可以不指明,已测试成功
                    //现在仅仅指明手机端口为8888
                    DatagramSocket ds = new DatagramSocket(8888);
    
                    //2.将要发送的数据封装到数据包中
                    String str ="udp tranmsimit,i am mobilephone";
                    byte[] buf =str.getBytes("utf-8");
                    DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.108"),10000);
    
                    //3.udp发送,使用socket服务将数据包发送出去
                    ds.send(dp);
                    /*接收数据*/
                    byte[] recvBuf = new byte[100];
                    DatagramPacket recvPacket
                        = new DatagramPacket(recvBuf , recvBuf.length);
                    ds.receive(recvPacket);
                    String recvStr = new String(recvPacket.getData() , 0 ,recvPacket.getLength());
                    show.setText("收到: 	" + recvStr);
                    //4.关闭连接
                    ds.close();
                }
                catch (IOException e)
                {
                    e.printStackTrace();
                }
            }
        }.start();
        
    }
    
    
    }

    前台代码:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        >
    
        <EditText
            android:id="@+id/show"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:cursorVisible="false"
            android:editable="false"
            android:ems="10" >
    
            <requestFocus />
        </EditText>
    
        <Button
            android:id="@+id/button1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="UDP客户端" />
    
    </LinearLayout>
    View Code

    权限代码:

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.simpleclientudp"
        android:versionCode="1"
        android:versionName="1.0" >
    
        <uses-sdk
            android:minSdkVersion="14"
            android:targetSdkVersion="19" />
        <uses-permission android:name="android.permission.INTERNET"/>
    
        <application
            android:allowBackup="true"
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name"
            android:theme="@style/AppTheme" >
            <activity
                android:name=".MainActivity"
                android:label="@string/app_name" >
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
        </application>
    
    </manifest>
    View Code

    效果:

  • 相关阅读:
    Python LED
    vmvare虚拟机经验
    Debian系统简要说明
    Android onclick监听事件打开新界面
    在国外搭个人服务器(顺便访问外网)
    生成指定时间内的 随机日起
    生成指定时间内的日期
    Mac 上查找javahome
    java 学习的网站
    Java 线程
  • 原文地址:https://www.cnblogs.com/shuqingstudy/p/4963247.html
Copyright © 2011-2022 走看看