udp-关于Android利用局域网进行UDP通信的问题

问题描述

关于Android利用局域网进行UDP通信的问题
我写了一个小程序准备利用UDP和电脑之间进行通信,然后基于这个做一点东西,可是问题是我用AVD测试很好用的,但是用真机测试就是不行。
我的思路是让电脑和Android设备连接一台路由器,路由器为两台设备分配固定的ip地址进行通信。
拜托大家帮我看看啊,我这才是第一步就郁闷的要死
下面是代码。
1:MainActivity

package com.company.zebork.testudpll;

import android.app.Activity;
import android.content.Context;
import android.net.wifi.WifiManager;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends Activity {

EditText text;Button send;Handler handler;Message msg;EditText ad;String address;@Overrideprotected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_main);    text = (EditText) findViewById(R.id.editText);    send = (Button) findViewById(R.id.send);    ad = (EditText) findViewById(R.id.editText2);    handler = new Handler() {        @Override        public void handleMessage(Message msg) {            text.setText("""");        }    };

/* send.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
handler.handleMessage(msg);
}
});*/

    send.setOnClickListener(new View.OnClickListener() {        @Override        public void onClick(View v) {            System.out.println(ad.getText().toString());            AsyncTask<String String  Void> toSend = new AsyncTask<String String Void>() {                @Override                protected Void doInBackground(String... params) {                    address = ad.getText().toString();                    UDPClient client = new UDPClient(address);                    System.out.println(""here"" + address);                    client.send(text.getText().toString());                    msg = new Message();                    handler.sendMessage(msg);                    return null;                }                @Override                protected void onPostExecute(Void aVoid) {                    super.onPostExecute(aVoid);                }            }.execute(address);        }    });}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {    // Inflate the menu; this adds items to the action bar if it is present.    getMenuInflater().inflate(R.menu.menu_main menu);    return true;}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {    // Handle action bar item clicks here. The action bar will    // automatically handle clicks on the Home/Up button so long    // as you specify a parent activity in AndroidManifest.xml.    int id = item.getItemId();    //noinspection SimplifiableIfStatement    if (id == R.id.action_settings) {        return true;    }    return super.onOptionsItemSelected(item);}

}

2、UDPClient

package com.company.zebork.testudpll;

import java.io.IOException;
import java.net.*;
public class UDPClient {

private DatagramPacket dp;private DatagramSocket ds;private byte[] buf;private String address;public UDPClient(String address) {    buf = new byte[4096];    this.address = address;    System.out.println(""??"" + address);    try {        ds = new DatagramSocket(8888);    } catch (SocketException e) {        e.printStackTrace();    }}public void send(String str) {    buf = str.getBytes();    try {        dp = new DatagramPacket(buf buf.lengthnew InetSocketAddress(address5679));        ds.send(dp);        ds.close();    } catch (UnknownHostException e) {        e.printStackTrace();    } catch (SocketException e) {        e.printStackTrace();    } catch (IOException e) {        e.printStackTrace();    }}

}

3、AndroidManifest【有些权限我都没有用到,因为调试这个错误才加上的】

<?xml version=""1.0"" encoding=""utf-8""?>
package=""com.company.zebork.testudpll"" >

<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>

4、activity_main.xml

xmlns:tools=""http://schemas.android.com/tools"" android:layout_width=""match_parent""
android:layout_height=""match_parent"" android:paddingLeft=""@dimen/activity_horizontal_margin""
android:paddingRight=""@dimen/activity_horizontal_margin""
android:paddingTop=""@dimen/activity_vertical_margin""
android:paddingBottom=""@dimen/activity_vertical_margin"" tools:context="".MainActivity""
android:orientation=""vertical"">

<EditText    android:layout_width=""match_parent""    android:layout_height=""wrap_content""    android:id=""@+id/editText""    android:layout_alignParentTop=""true""    android:layout_centerHorizontal=""true"" /><EditText    android:layout_width=""match_parent""    android:layout_height=""wrap_content""    android:id=""@+id/editText2""    android:layout_gravity=""center_horizontal""    android:text=""ip"" /><Button    android:layout_width=""wrap_content""    android:layout_height=""wrap_content""    android:text=""发送""    android:id=""@+id/send""    android:layout_centerVertical=""true""    android:layout_centerHorizontal=""true""    android:layout_gravity=""center_horizontal"" />

5、服务器的Java文件,我是用JavaSE写的,因为不会javaEE
import java.io.IOException;
import java.net.*;
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class TestUDPClient extends Frame{

private static DatagramPacket dp;private static DatagramSocket ds;private static TextField text;private static TextArea ta;public static void main(String[] args) {    Frame f = new TestUDPClient();    f.setLocation(200 200);    f.setSize(300200);    f.setVisible(true);    text = new TextField();    ta = new TextArea();    f.add(textBorderLayout.SOUTH);    f.add(taBorderLayout.CENTER);    f.addWindowListener(new WindowAdapter() {        @Override        public void windowClosing(WindowEvent e) {            if(ds!=null)                ds.close();            System.exit(0);        }    });    startServer();}public static void startServer() {    byte[] buf = new byte[4096];    dp = new DatagramPacket(bufbuf.length);    try {        ds = new DatagramSocket(5679);    } catch (SocketException e) {        e.printStackTrace();    }    while(true) {        try {            ds.receive(dp);            if(ta.getText().length() > 0)                ta.setText(ta.getText() + ""n"" + new String(buf0dp.getLength()));            else                ta.setText(new String(buf0dp.getLength()));        } catch (IOException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }}

}

解决方案

先看是否分配到合法IP,然后就是建立连接是否成功

时间: 2024-09-11 13:16:42

udp-关于Android利用局域网进行UDP通信的问题的相关文章

android开发-android下vlc播放udp视频流的问题

问题描述 android下vlc播放udp视频流的问题 50C 各位csdn的大神,小弟的问题如下: 我在android的手机上使用MediaCodec对 摄像头捕捉的YV12图像,采用"video/avc"编码器去编码,这样应该编码出来的是H264格式的,然后我再通过UDP将每一帧图像发送给另一部手机,我在另一部手机上用vlc播放器去播放,(输入的流地址是""udp://@:port""),死活都播不出来. 如果我在发送端把视频帧写入文件,且把

Android网络编程之UDP通信模型实例_Android

什么是Android UDP? UDP是User Datagram Protocol的简称,中文名是用户数据包协议,是OSI参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务.它是IETF RFC 768是UDP的正式规范.在网络中它与TCP协议一样用于处理数据包.在OSI模型中,在第四层-传输层,处于IP协议的上一层.UDP有不提供数据报分组.组装和不能对数据包的排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全完整到达的.UDP用来支持那些需要在计算机之间传输数据

利用java实现UDP(二)

问题描述 本帖子接<利用java实现UDP>这个帖子:客户端:UDPClientBean.javapackageUDPClient;importjava.io.*;importjava.net.*;classUDPClientBean{privateDatagramSocketdSocket;privateintServerPort;privateintClientPort;privateInetAddressServerIP;privateInetAddressClientIP;privat

Android网络编程之UDP通信模型实例

什么是Android UDP? UDP是User Datagram Protocol的简称,中文名是用户数据包协议,是OSI参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务.它是IETF RFC 768是UDP的正式规范.在网络中它与TCP协议一样用于处理数据包.在OSI模型中,在第四层-传输层,处于IP协议的上一层.UDP有不提供数据报分组.组装和不能对数据包的排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全完整到达的.UDP用来支持那些需要在计算机之间传输数据

android 客户端与服务端通信

问题描述 android 客户端与服务端通信 各位大神,我想用两个fragment制作两个页面,一个页面(fragment1)实现服务器与客户端的连接,另一个(fragment2)实现收发数据,但fragment2的代码应该要建立在客户端与服务器的连接上对吧,请问代码该怎样写呢?或者思路是怎样的? 解决方案 Android网络编程之TCP通信----简单客户端与服务端通信Android网络编程之UDP通信----简单客户端与服务端通信Android客户端与PHP服务端通信(二)---JSON交互

android与PC用socket通信

问题描述 android与PC用socket通信 写了一个小的测试程序,android手机和PC进行通信.服务器(PC)端代码:public class SimpleServer{ public static void main(String[] args) throws IOException { // 创建一个ServerSocket,用于监听客户端Socket的连接请求 ServerSocket ss = new ServerSocket(30000); //① // 采用循环不断接受来自

接口-Android 客户端与服务器的通信

问题描述 Android 客户端与服务器的通信 现在在做一个收货地址的功能.首先进入我的收货地址界面,会请求一个我的地址接口,显示个人的地址列表.然后有一个按钮,是进入增加收货地址界面,把手机号,姓名等信息成功提交给服务器.然后再次请求我的地址接口.为什么新添加的地址有时能请求到,有时又不能请求到 解决方案 你的意思是说提交给服务器之后数据没有马上写入到数据库,存在着一个延时,是吗.服务端应该没问题,ios的做这个功能没有问题 解决方案二: 有时候能够请求到服务器端的数据,有时候请求不到数据,肯

协议-Android软件使用TCP进行通信,连接不到服务端,在同一子网,代码跟异常日志都有,请大神指教

问题描述 Android软件使用TCP进行通信,连接不到服务端,在同一子网,代码跟异常日志都有,请大神指教 客户端线程:class BB1 extends Thread{ public void run() { try { System.out.println(""hahahha""); Socket client=new Socket(ipadressPORT); System.out.println(client.getPort()); mingling=&qu

android通过socket与电脑通信

问题描述 android通过socket与电脑通信 DatagramPacket p = new DatagramPacket(msgbytemsg_lengthlocalport); try{ s.send(p); }catch(IOException e){ e.printStackTrace(); }用模拟器运行正常,真机测试异常.异常代码段锁定在发送这里,但是看不出有什么问题,求大神 解决方案 看看异常信息的详细内容是什么?如果相同的代码,在模拟器上运行正常.且电脑也能接收到数据,分析可