导航:首页 > 操作系统 > androidudp传输

androidudp传输

发布时间:2022-05-11 13:57:44

android接收不到udp包吗

1、有的手机不能直接接收UDP包,可能是手机厂商在定制Rom的时候把这个功能给关掉了。
2、在UDP通信中,android端发送UDP广播包没有问题。至于接收的话,有时候不能接收到包。

❷ android udp收发问题(端口)

发送端指定端口
DatagramSocket ds = new DatagramSocket(9000);

❸ 如何实现TCP和UDP传输

首先我们来看一下什么是TCP和UDP。
什么是TCP?
TCP:Transmission Control Protocol 传输控制协议TCP是一种面向连接(连接导向)的、可靠的、基于字节流的运输层(Transport layer)通信协议,由IETF的RFC 793说明(specified)。在简化的计算机网络OSI模型中,它完成第四层传输层所指定的功能。应用层向TCP层发送用于网间传输的、用8位字节表示的数据流,然后TCP把数据流分割成适当长度的报文段(通常受该计算机连接的网络的数据链路层的最大传送单元(MTU)的限制)。之后TCP把结果包传给IP层,由它来通过网络将包传送给接收端实体的TCP层。TCP为了保证不发生丢包,就给每个字节一个序号,同时序号也保证了传送到接收端实体的包的按序接收。然后接收端实体对已成功收到的字节发回一个相应的确认(ACK);如果发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据(假设丢失了)将会被重传。TCP用一个校验和函数来检验数据是否有错误;在发送和接收时都要计算校验和。
首先,TCP建立连接之后,通信双方都同时可以进行数据的传输,其次,他是全双工的;在保证可靠性上,采用超时重传和捎带确认机制。
在流量控制上,采用滑动窗口协议[1],协议中规定,对于窗口内未经确认的分组需要重传。
在拥塞控制上,采用慢启动算法
什么是UDP?
UDP 是User Datagram Protocol的简称, 中文名是用户数据包协议,是 OSI 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。它是IETF RFC 768是UDP的正式规范。在网络中它与TCP协议一样用于处理数据包。在OSI模型中,在第四层——传输层,处于IP协议的上一层。UDP有不提供数据报分组、组装和不能对数据包的排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全完整到达的。 UDP用来支持那些需要在计算机之间传输数据的网络应用。包括网络视频会议系统在内的众多的客户/服务器模式的网络应用都需要使用UDP协议。UDP协议从问世至今已经被使用了很多年,虽然其最初的光彩已经被一些类似协议所掩盖,但是即使是在今天,UDP仍然不失为一项非常实用和可行的网络传输层协议。
与所熟知的TCP(传输控制协议)协议一样,UDP协议直接位于IP(网际协议)协议的顶层。根据OSI(开放系统互连)参考模型,UDP和TCP都属于传输层协议。
UDP协议的主要作用是将网络数据流量压缩成数据报的形式。一个典型的数据报就是一个二进制数据的传输单位。每一个数据报的前8个字节用来包含报头信息,剩余字节则用来包含具体的传输数据。
TCP和UDP在android中的使用和在java里是完全一样的。
首先我们看看TCP连接,下图为TCP连接的一个示意图:
TCP传输原理
是不是很好理解,这里就不多说了,直接看代码吧!实践出真知。
TCP服务器端代码:
try { Boolean endFlag = false; ServerSocket ss = new ServerSocket(12345); while (!endFlag) { // 等待客户端连接 Socket s = ss.accept(); BufferedReader input = new BufferedReader(newInputStreamReader(s.getInputStream())); //注意第二个参数据为true将会自动flush,否则需要需要手动操作output.flush() PrintWriter output = newPrintWriter(s.getOutputStream(),true); String message = input.readLine(); Log.d("Tcp Demo", "message from Client:"+message); output.println("message received!"); //output.flush(); if("shutDown".equals(message)){ endFlag=true; } s.close(); } ss.close(); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }

TCP客户端代码:
try { Socket s = new Socket("localhost", 12345); // outgoing stream redirect to socket OutputStream out = s.getOutputStream(); // 注意第二个参数据为true将会自动flush,否则需要需要手动操作out.flush() PrintWriter output = new PrintWriter(out, true); output.println("Hello IdeasAndroid!"); BufferedReader input = new BufferedReader(newInputStreamReader(s .getInputStream())); // read line(s) String message = input.readLine(); Log.d("Tcp Demo", "message From Server:" + message); s.close(); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }

下面我们看看UDP:
UDP传输原理
UDP服务器端代码:
// UDP服务器监听的端口 Integer port = 12345; // 接收的字节大小,客户端发送的数据不能超过这个大小 byte[] message = new byte[1024]; try { // 建立Socket连接 DatagramSocket datagramSocket = new DatagramSocket(port); DatagramPacket datagramPacket = new DatagramPacket(message, message.length); try { while (true) { // 准备接收数据 datagramSocket.receive(datagramPacket); Log.d("UDP Demo", datagramPacket.getAddress() .getHostAddress().toString() + ":" + new String(datagramPacket.getData())); } } catch (IOException e) { e.printStackTrace(); } } catch (SocketException e) { e.printStackTrace(); }

UDP客户端代码:
public static void send(String message) { message = (message == null ? "Hello IdeasAndroid!" : message); int server_port = 12345; DatagramSocket s = null; try { s = new DatagramSocket(); } catch (SocketException e) { e.printStackTrace(); } InetAddress local = null; try { // 换成服务器端IP local = InetAddress.getByName("localhost"); } catch (UnknownHostException e) { e.printStackTrace(); } int msg_length = message.length(); byte[] messagemessageByte = message.getBytes(); DatagramPacket p = new DatagramPacket(messageByte, msg_length, local, server_port); try { s.send(p); } catch (IOException e) { e.printStackTrace(); } }

代码中需要注意的地方已做了注释,希望本文对您有所帮助!

❹ 请问android用两个模拟器udp通信传输音频文件要怎么做

用socket编程是可以的,网上有

❺ android中的tcp udp需要权限吗

android中的tcp和udp不需要任何权限。因为它们都是网络通讯协议的一种,只要手机没有问题,能够上网,就可以使用TCP和UDP协议了。
TCP/IP是用于电脑通信的一组协议,我们通常称之为TCP/IP协议族,它是七十年代中期美国国防部为其ARPANET广域网开发的网络体系结构和协议标准,以它为基础组建的Internet是目前国际上规模最大的电脑网络,正因为Internet的广泛使用,使得TCP/IP成了事实上的标准。之所以说TCP/IP是一个协议族,是因为TCP/IP协议包括TCP、IP、UDP、ICMP、RIP、TELNET、FTP、SMTP、ARP、TFTP等许多协议,这些协议统称为TCP/IP协议。
TCP/IP协议的名字实际上是来自最重要的两个协议,TCP(传输控制协议)和IP(网际协议)。它负责把需要传输的信息分割成许多小包,也叫做信息包,然后把这些信息包发往目的地,它能有效地保证传输的安全性和正确性。
在Internet内部,信息不是以一个恒定的流从主机传送到主机,而是把数据分解成小包,即数据包进行传送。例如你传送一封很长的信件给你的朋友,TCP就可以把这些信息分成很多个数据包,每个数据包用一个序号和一个接收地址来标定。此外,TCP还插入一些纠错信息。
接着数据包被传过网络,这就是IP的工作,即把它们传送给远程主机。在另一端,TCP接收到数据包并核查错误。如果有错误发生,TCP可以要求重发这个特定的数据包。只要所有的数据包都被正确地接收到,TCP将用序号来重新构造原始信息。换句话说,IP的工作是把原始数据从一地传送到另一地,TCP的工作是管理这种流动并确保其数据是正确的。ß把数据分解成数据包有很多好处。首先,它允许Internet让很多不同的用户在同一时刻使用同一通讯线路。因为这些数据包不必一起输送,所以通讯线路可以载着所有类型的数据包按它们自己的路径从一地到另一地。就如一条高速公路上各个汽车都在公路上行驶。ß用数据包传输的另一个好处是:当某处出错,只需重新传送单个数据包,而不是整个信息,这样会大大加快Internet的传输总速度。
TCP/IP是把电脑和通讯设备组织成网络的协议大家庭,两个最重要的协议是TCP和IP。IP从一地到另一地传输数据,而TCP则保证它们都正确地工作。
目前,遍布世界范围的Internet网络主要采用的就是TCP/IP协议,而且,国内大多数网络建设现在已朝着TCP/IP协议的方向发展。

❻ android udp通信需要什么权限

一、有的手机不能直接接收UDP包,可能是手机厂商在定制Rom的时候把这个功能给关掉了。
1、可先在oncreate()方法里面实例化一个WifiManager.MulticastLock 对象lock;具体如下:
WifiManager manager = (WifiManager) this
.getSystemService(Context.WIFI_SERVICE);
WifiManager.MulticastLock lock= manager.createMulticastLock("test wifi");

2、在调用广播发送、接收报文之前先调用lock.acquire()方法;
3、用完之后及时调用lock.release()释放资源,否决多次调用lock.acquire()方法,程序可能会崩,详情请见
Caused by: java.lang.UnsupportedOperationException: Exceeded maximum number of wifi locks
注;记得在配置文件里面添加如下权限:
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />

经过这样处理后,多数手机都能正常发送接收到广播报文。
本小点转载自Android手机接收不到UDP报文
二、在UDP通信中,android端发送UDP广播包没有问题。至于接收的话,有时候不能接收到包。
在UDP通信中,android端发送UDP广播包没有问题。至于接收的话,有时候不能接收到包。但是如果UDP包中指定了目标主机的地址的话,那么android端就能正常接收。
下面上一段代码,大家可用这段代码进行测试。
1、在一个Service里面,我们创建一个线程

public void onCreate() {//用于创建线程
WifiManager manager = (WifiManager) this
.getSystemService(Context.WIFI_SERVICE);
udphelper = new UdpHelper(manager);

//传递WifiManager对象,以便在UDPHelper类里面使用MulticastLock
udphelper.addObserver(MsgReceiveService.this);
tReceived = new Thread(udphelper);
tReceived.start();
super.onCreate();
}

2、弄一个UDP帮助类,这个类主要用于发送和接收数据

package com.example.com.ihome.bang.util;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.MulticastSocket;
import java.net.SocketException;
import java.net.UnknownHostException;
import java.util.Observable;
import com.example.com.ihome.bang.tool.SendThread;
import android.net.wifi.WifiManager;
import android.util.Log;

/**
*
* UdpHelper帮助类
*
* @author 陈喆榕
*
*/
public class UdpHelper implements Runnable {
public Boolean IsThreadDisable = false;//指示监听线程是否终止
private static WifiManager.MulticastLock lock;
InetAddress mInetAddress;
public UdpHelper(WifiManager manager) {
this.lock= manager.createMulticastLock("UDPwifi");
}
public void StartListen() {
// UDP服务器监听的端口
Integer port = 8903;
// 接收的字节大小,客户端发送的数据不能超过这个大小
byte[] message = new byte[100];
try {
// 建立Socket连接
DatagramSocket datagramSocket = new DatagramSocket(port);
datagramSocket.setBroadcast(true);
DatagramPacket datagramPacket = new DatagramPacket(message,
message.length);
try {
while (!IsThreadDisable) {
// 准备接收数据
Log.d("UDP Demo", "准备接受");
this.lock.acquire();

datagramSocket.receive(datagramPacket);
String strMsg=new String(datagramPacket.getData()).trim();
Log.d("UDP Demo", datagramPacket.getAddress()
.getHostAddress().toString()
+ ":" +strMsg );this.lock.release();
}
} catch (IOException e) {//IOException
e.printStackTrace();
}
} catch (SocketException e) {
e.printStackTrace();
}

}
public static void send(String message) {
message = (message == null ? "Hello IdeasAndroid!" : message);
int server_port = 8904;
Log.d("UDP Demo", "UDP发送数据:"+message);
DatagramSocket s = null;
try {
s = new DatagramSocket();
} catch (SocketException e) {
e.printStackTrace();
}
InetAddress local = null;
try {
local = InetAddress.getByName("255.255.255.255");
} catch (UnknownHostException e) {
e.printStackTrace();
}
int msg_length = message.length();
byte[] messageByte = message.getBytes();
DatagramPacket p = new DatagramPacket(messageByte, msg_length, local,
server_port);
try {

s.send(p);
s.close();

} catch (IOException e) {
e.printStackTrace();
}
}

@Override
public void run() {
StartListen();
}

❼ android的tcp和udp有什么联系

tcp和udp都是网络传输协议, 和android没有直接关系。所有基于网络访问的过程都可能涉及这2个协议。简单来讲:tcp是可靠连接,即传输的数据必须完整,如用户登录的信息的验证; udp是不可靠连接,即传输过程不能保证数据的完整性,如语音聊天,当网络条件不好时,可能会丢失内容。

❽ android下有没有udp的可靠传输库

int bufsize = 64;
byte buf[] = new byte[bufsize];
DatagramSocket ds = new DatagramSocket(5555);

DatagramPacket dp = new DatagramPacket(buf, buf.length);
ds.setSoTimeout(50);
ds.receive(dp);
System.out.println(dp.getData());

要不断执行、并处理错误

❾ android 如何用UDP协议接收无线硬件设备的数据

理论上来说是可以的,但是这个涉及到传输层的问题,需要你对通信原理、系统芯片、Android编程有很深的理解,建议放弃。

阅读全文

与androidudp传输相关的资料

热点内容
如何在最左侧添加文件夹 浏览:498
python实现https请求 浏览:468
一端无支座端梁要加密吗 浏览:247
云服务器能做什么兼职 浏览:970
大疆程序员姜 浏览:413
饥荒如何挂服务器 浏览:242
GM附魔命令 浏览:599
反编译自己制作的软件 浏览:35
ros用c还是python好 浏览:78
安卓九系统提醒怎么关 浏览:656
我的世界服务器有领地怎么抄家 浏览:36
python实现多态 浏览:300
幼师pdf 浏览:941
你怎么用python开发游戏 浏览:648
雷霆战机服务器异常是什么问题 浏览:669
程序员客栈20 浏览:255
化妆pdf下载 浏览:923
takla服务器ip地址 浏览:357
欧盟加密资产法律 浏览:573
威纶通反编译密码是多少 浏览:201