大佬教程收集整理的这篇文章主要介绍了android – UDP数据包(通过WiFi Direct)永远不会到达,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
那些阅读我之前的问题的人可能已经知道这一点:我目前正试图抓住整个WiFi Direct的东西.到目前为止我所做的就是创建连接.
我想要做的是通过UDP将数据包发送到groupowner(其IP当然是已知的) – 但它似乎每次都迷失方向.
这是我的一些代码,我有一个接收文件的服务和一个在后台提交它们的intentservice:
@Override
public void run() {
Log.d(tag, "Thread starTing...");
try {
app.log("opening UDP socket to receive files.");
DatagramSocket socket = new DatagramSocket(PORT);
app.log("Socket open!");
socket.setSoTimeout(5000);
app.log("WaiTing for packet..");
while (isRunning && !isInterrupted()) {
DatagramPacket packet = new DatagramPacket(
new byte[WiFiPacket.PACKET_SIZE],
WiFiPacket.PACKET_SIZE);
try {
socket.receive(packet);
app.log("Received " + packet.getLength()
+ " bytes, trying to parse!");
parsePacket(packet);
} catch (SocketTimeoutException E) {
} catch (Exception E) {
app.log("Something went wrong: " + e.getmessage());
e.printStackTrace();
}
}
socket.close();
app.log("Closing UDP socket");
} catch (Exception E) {
e.printStackTrace();
}
}
@H_618_11@
常量WiFiPacket.PACKET_SIZE设置为1024 * 32(32 KB,因为我收到“ERRBLABLA MSG太长”错误,值较高).
FileTransferservice.java
@Override
protected void onHandleIntent(Intent intent) {
App app = (App) getApplication();
Context context = getApplicationContext();
Boolean righTintent = false;
WiFiFile file = null;
if (intent.getAction().equals(ACTION_SEND_TEXT)) {
righTintent = true;
file = WiFiFile.fromText(intent.getExtras().getString(EXTRAS_TEXT));
} else if (intent.getAction().equals(ACTION_SEND_FILE)) {
righTintent = true;
file = WiFiFile.fromFile(intent.getExtras().getString(
EXTRAS_FILE_PATH));
}
if (righTintent && file != null) {
app.getOnWiFiTransmissionChangedListener().onNewOutgoingTransfer(
filE);
String text = intent.getExtras().getString(EXTRAS_TEXT);
String host = intent.getExtras().getString(
EXTRAS_GROUP_owneR_ADDRESS);
DatagramSocket socket = null;
int port = intent.getExtras().geTint(EXTRAS_GROUP_owneR_PORT);
Log.d(tag, "Sending packets to " + host + ":" + port);
try {
socket = new DatagramSocket();
int bytesSent = 0;
for (WiFiPacket p : filE) {
Log.d(tag, "Preparing another packet..");
byte[] payload = p.getBytes();
DatagramPacket packet = new DatagramPacket(payload,
payload.length, InetAddress.getByName(host), port);
Log.d(tag, "Sending packet..");
socket.send(packet);
bytesSent += payload.length;
Log.d(tag, "Packet send! Contained " + payload.length
+ " bytes! All over we've sent about " + bytesSent
+ " bytes!");
List<WiFiFile> list = new ArrayList<WiFiFile>();
list.add(filE);
app.getOnWiFiTransmissionChangedListener()
.onTransferProgressChanged(list);
}
app.getOnWiFiTransmissionChangedListener()
.onFileTransfersuccessful(filE);
Log.d(tag, "Client: Data written");
} catch (IOException E) {
e.printStackTrace();
Log.e(tag, e.getmessage());
} finally {
if (socket != null) {
if (socket.isConnected()) {
socket.close();
}
}
}
}
}
@H_618_11@
代码可能不是最好的,但至于现在我唯一关心的是接收该死的数据包.
以上是大佬教程为你收集整理的android – UDP数据包(通过WiFi Direct)永远不会到达全部内容,希望文章能够帮你解决android – UDP数据包(通过WiFi Direct)永远不会到达所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。