zoukankan      html  css  js  c++  java
  • python Android udp通信

    python发送:

    参考:https://www.cnblogs.com/reader/p/10011666.html

    # -*- coding:utf-8 -*-
    
    from socket import *
    from time import ctime, sleep
    import threading
    
    
    class ChatRoomPlus:
        def __init__(self):
            # 全局参数配置
            self.encoding = "utf-8"  # 使用的编码方式
            self.broadcastPort = 22222   # 广播端口
    
            # 创建广播接收器
            self.recvSocket = socket(AF_INET, SOCK_DGRAM)
            self.recvSocket.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
            self.recvSocket.setsockopt(SOL_SOCKET, SO_BROADCAST, 1)
            self.recvSocket.bind(('', self.broadcastPort))
    
            # 创建广播发送器
            self.sendSocket = socket(AF_INET, SOCK_DGRAM)
            self.sendSocket.setsockopt(SOL_SOCKET, SO_BROADCAST, 1)
    
            # 其他
            self.threads = []
    
        def send(self):
            """发送广播"""
    
            print("UDP发送器启动成功...")
            while True:
                sendData="hello123"
                self.sendSocket.sendto(sendData.encode(self.encoding), ('255.255.255.255', self.broadcastPort))
                print("【%s】%s:%s" % (ctime(), "", sendData))
    
                sleep(1)
            self.sendSocket.close()
    
        def recv(self):
            """接收广播"""
    
            print("UDP接收器启动成功...")
            while True:
                # 接收数据格式:(data, (ip, port))
                recvData = self.recvSocket.recvfrom(1024)
    
                print("【%s】[%s : %s] : %s" % (ctime(), recvData[1][0], recvData[1][1], recvData[0].decode(self.encoding)))
    
                sleep(1)
    
        def start(self):
            """启动线程"""
    
            # t1 = threading.Thread(target=self.recv)
            t2 = threading.Thread(target=self.send)
            # self.threads.append(t1)
            self.threads.append(t2)
    
            for t in self.threads:
                t.setDaemon(True)
                t.start()
    
            while True:
                pass
    
    
    if __name__ == "__main__":
        demo = ChatRoomPlus()
        demo.start()

    Android接收:

    参考:https://blog.csdn.net/aino0613/article/details/73087313

    需要先在AndroidManifest.xml添加权限

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

       private DatagramSocket msocketClient;
        private DatagramPacket Packet_Receive;
        private String ip;
        private String Port;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); et1 = findViewById(R.id.EditText02); Open(); } public void Open() { System.out.println("***start***"); try { msocketClient = new DatagramSocket(null); msocketClient.setReuseAddress(true); msocketClient.bind(new InetSocketAddress(22222)); } catch (Exception e) { e.printStackTrace(); } if (msocketClient != null) { new Thread(UdpReceiver).start(); } } Runnable UdpReceiver = new Runnable() { @Override public void run() { WifiManager mwifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE); WifiManager.MulticastLock lock= mwifiManager.createMulticastLock("UDPwifi"); while (true) { // System.out.println("***UdpReceiver***"); byte[] Buffer_Receive = new byte[1024]; Packet_Receive = new DatagramPacket(Buffer_Receive, 1024); if (Packet_Receive != null) { try { lock.acquire(); msocketClient.receive(Packet_Receive); int length = Packet_Receive.getLength(); if (length > 0) { final String data = new String(Buffer_Receive, 0, Packet_Receive.getLength()); // System.out.println("***data***"+data); ip=""+Packet_Receive.getAddress(); Port=""+data; // System.out.println("ip : "+Packet_Receive.getAddress()+"port :"+Packet_Receive.getPort()); runOnUiThread(new Runnable() { @Override public void run() { et1.setText("已连接"+ip+":"+Port); } }); } lock.release(); } catch (IOException e) { e.printStackTrace(); } } } } };

    Android手机和电脑(运行python程序)必须在同一网络下(比如同一wifi),否则连接不上。即使手机连接的是电脑发射的热点wifi都不可以。或者使用电脑里的Android模拟机也连接不上。

    参考:https://blog.csdn.net/ns_code/article/details/13094375

    https://blog.csdn.net/qq_26075861/article/details/78361363

  • 相关阅读:
    Android的activity的生命周期
    COCOS学习笔记--重力感应Acceleration
    【深入了解cocos2d-x 3.x】定时器(scheduler)的使用和原理探究(2)
    cocos2d-x改底层之获取UIListView的实际内容大小
    Android 使用ListView的A-Z字母排序功能实现联系人模块
    Netty3 源代码分析
    A002-开发工具介绍
    数据结构:二叉树(前,中,后,层次)非递归遍历。
    jQuery开发之Ajax
    cocos2d-x-3.6 引擎概述
  • 原文地址:https://www.cnblogs.com/cekong/p/11414512.html
Copyright © 2011-2022 走看看