一个简单的Android UDP Client

(该代码在4.2.2内调试通过)

1.记得加权限

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

注意:Android 4.0之后,就不能在主线程进行socket通信,否则会抛异常。

2.代码

MainActivity.java

 1 package mao.example.quicksend;
 2
 3
 4 import android.app.Activity;
 5 import android.content.Context;
 6 import android.os.Bundle;
 7 import android.os.Handler;
 8 import android.util.Log;
 9 import android.view.Menu;
10 import android.view.MenuItem;
11 import android.widget.Button;
12 import android.widget.TextView;
13 import android.widget.Toast;
14 import android.view.View;
15
16 public class MainActivity extends Activity {
17
18     @Override
19     protected void onCreate(Bundle savedInstanceState) {
20         super.onCreate(savedInstanceState);
21         setContentView(R.layout.activity_main);
22
23         InitUI();
24
25         //获得Button对象
26         Button btnConnect = (Button) findViewById(R.id.buttonConnect);
27         btnConnect.setOnClickListener(new Button.OnClickListener() {
28             public void onClick(View v)
29             {
30                 //这里处理事件
31
32                 //ConnectServer();
33                 //UDPClient udpET = new UDPClient("192.168.0.14","123");
34                 //udpET.start();
35                 //DisplayToast("点击了\"连接\"按钮");
36             }
37         });
38
39         //发送Button
40         btnConnect = (Button) findViewById(R.id.buttonSend);
41         btnConnect.setOnClickListener(new Button.OnClickListener() {
42             public void onClick(View v)
43             {
44                 //这里处理事件
45                 SendText();
46             }
47         });
48     }
49
50     @Override
51     public boolean onCreateOptionsMenu(Menu menu) {
52         // Inflate the menu; this adds items to the action bar if it is present.
53         getMenuInflater().inflate(R.menu.main, menu);
54         return true;
55     }
56
57     @Override
58     public boolean onOptionsItemSelected(MenuItem item) {
59         // Handle action bar item clicks here. The action bar will
60         // automatically handle clicks on the Home/Up button, so long
61         // as you specify a parent activity in AndroidManifest.xml.
62         int id = item.getItemId();
63         if (id == R.id.action_settings) {
64             return true;
65         }
66         return super.onOptionsItemSelected(item);
67     }
68
69     /* 显示Toast  */
70     public void DisplayToast(String str)
71     {
72         Toast.makeText(this, str, Toast.LENGTH_SHORT).show();
73     }
74
75     public void InitUI()
76     {
77         TextView text=(TextView)findViewById(R.id.editTextIP);
78         text.setText("192.168.0.14");
79
80         text = (TextView)findViewById(R.id.editTextFilePath);
81         text.setText("Udp Client Send Test");
82     }
83
84     // connect server
85     public void SendText()
86     {
87         TextView editIP=(TextView)findViewById(R.id.editTextIP);
88         TextView editText=(TextView)findViewById(R.id.editTextFilePath);
89         String message = editText.getText().toString() + "\r\n";
90
91         UDPClient udpET = new UDPClient(editIP.getText().toString(), message);
92         udpET.start();
93     }
94 }

UDPClient.java

 1 package mao.example.quicksend;
 2
 3 import java.io.IOException;
 4 import java.net.DatagramPacket;
 5 import java.net.DatagramSocket;
 6 import java.net.InetAddress;
 7 import java.net.SocketException;
 8 import java.lang.String;
 9
10 public class UDPClient extends Thread{
11
12     public String m_serverIP;
13     public String m_text;
14
15     public  UDPClient(String strServerIP, String strText)
16     {
17         m_serverIP = strServerIP;
18         m_text = strText;
19     }
20
21     @Override
22     public void run() {
23         // TODO Auto-generated method stub
24         int TIMEOUT = 3000;
25         int servPort = 8800;
26         byte[] bytesToSend = m_text.getBytes();//"test_client".getBytes();
27
28         try {
29             InetAddress serverAddress = InetAddress.getByName(m_serverIP);
30             DatagramSocket socket = new DatagramSocket();
31             socket.setSoTimeout(TIMEOUT);
32
33             DatagramPacket sendPacket = new DatagramPacket(bytesToSend,bytesToSend.length,serverAddress,servPort);
34             socket.send(sendPacket);
35
36             socket.close();
37         } catch (SocketException e){
38             e.printStackTrace();
39         }catch(IOException e){
40             e.printStackTrace();
41         }
42     }
43 }

3. activity_main.xml

 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:id="@+id/LinearLayout1"
 4     android:layout_width="match_parent"
 5     android:layout_height="match_parent"
 6     android:orientation="vertical"
 7     android:paddingBottom="@dimen/activity_vertical_margin"
 8     android:paddingLeft="@dimen/activity_horizontal_margin"
 9     android:paddingRight="@dimen/activity_horizontal_margin"
10     android:paddingTop="@dimen/activity_vertical_margin"
11     tools:context="mao.example.quicksend.MainActivity" >
12
13     <EditText
14         android:id="@+id/editTextIP"
15         android:layout_width="match_parent"
16         android:layout_height="wrap_content"
17         android:hint="@string/text_IP" />
18
19     <Button
20         android:id="@+id/buttonConnect"
21         android:layout_width="match_parent"
22         android:layout_height="wrap_content"
23         android:text="@string/text_connect" />
24
25     <EditText
26         android:id="@+id/editTextFilePath"
27         android:layout_width="match_parent"
28         android:layout_height="wrap_content"
29         android:hint="@string/text_filePath" >
30
31         <requestFocus />
32     </EditText>
33
34     <Button
35         android:id="@+id/buttonFileSel"
36         android:layout_width="match_parent"
37         android:layout_height="wrap_content"
38         android:text="@string/text_sel" />
39
40     <Button
41         android:id="@+id/buttonSend"
42         android:layout_width="match_parent"
43         android:layout_height="wrap_content"
44         android:text="@string/text_send" />
45
46 </LinearLayout>

时间: 2024-11-03 23:53:28

一个简单的Android UDP Client的相关文章

Android高效的应用程序开发工具集1---ant构建一个简单的Android工程

在java编译那些事通过提到ant编译Java工程,如今扩大到用它来构建Android目,事实上道理是相通的.变化的仅仅是使用的形式.ant构建相比IDE的优点是多个子项目使用自己定义jar包时,ant能够更好的完毕自己主动化构建.一个命令就搞定整个项目的编译而不用手工的导出jar包然后再将其放到指定文件夹. 这就是高效的构建工具所标榜的. 先来说说ant在Linux下的安装(那篇文章写的太过简单,事实上也是非常easy的,别看mannul中写的那么复杂). 1.ant的安装 最简单的办法就是直

一个简单的Android小实例

一.配置环境 1.下载intellij idea15 2.安装Android SDK,通过Android SDK管理器安装或卸载Android平台 3.安装JDK 二.intellij idea新建Android工程 1.File->New-Project... 2.选择Android->Application Module,下一步 说明:建议选择这个项,建立的是一个可以运行的几乎是空的工程,是用ant进行构建的目录结构: gradle:Android module,建立的工程是以gradle

实现一个简单的android开关

最近在学习android中的graphics中画图系列,按照大神思路,找葫芦画瓢实现了一个开关,如图下: 记录一下实现方式: 1.画背景 上图形状,分成两个半圆与一个矩形,那么代码可以写成: private void drawBackground(Canvas canvas) { mBackGroundPaint.setColor(mCurrentBackGroundColor); //画右边的半圆 RectF recF = new RectF(mToggleWidth / 2 - mRadiu

一个简单的android自定义view(Switch Button for api &lt; 14)

1.编写主类 package com.sample.button; import android.content.Context; import android.content.res.TypedArray; import android.graphics.drawable.Drawable; import android.util.AttributeSet; import android.util.Log; import android.widget.CompoundButton; impor

一个简单Android下载管理器的实现(支持断点续传)

近期工作不是很忙,时间比较多,所以在空闲时间准备自己编写一个简单的Android下载管理器.该管理器实现如下功能: 1.能够支持正常的下载,暂停,继续,安装操作. 2.支持断点续传,实现暂停继续功能,在推出应用后,再次进入应用依然能正常将文件下载完成. 3.实现实时状态回调,下载进度,速度,一目了然. 以上是UML设计图,这个简单下载器的实现,有几个技术难点,攻克它们问题就迎刃而解. 1.如何实现断点续传:这个问题其实不难,网上也有很多相关资料,基本原理都相同,就是记录下载任务上一次中断的位置,

Spring cloud实战 从零开始一个简单搜索网站(三)

上文已经完成了一个简单的   浏览器 到 Client 到CSDN端的通路 我们的架构是每个博客网址为一个单独的组件, 这里为了方便直接先用CSDN 那个组件复制下 我这里改成 SDN 修改下 application.properties   端口记得改 eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/spring.application.name=sdnserver.port=8983 下面是TOMCAT   

Kivy a to Z -- 一个简单的通过adb同步Android系统文件的工具

来兴趣时写了些Kivy的代码,调试却总感觉不是很方便.直接打包到public.mp3的方式太繁锁,用文件共享的软件又发现没有一个好用的, 用samba filesharing本来也只是慢,但是更新的版本之后就一直提示说wifi没有tethering,意思是wifi热点没有打开,但是打开了还是提示没有tethering. 找了个叫什么卓*力的文件管理器,下载了samba插件后输入用户名和密码死活不对,被搞得实在恼火,花了点时间写了个通过adb同步安卓文件的工具,用着也挺爽的. 事件为什么总是要搞得

打造支持apk下载和html5缓存的 IIS(配合一个超简单的android APP使用)具体解释

为什么要做这个看起来不靠谱的东西呢? 由于刚学android开发,还不能非常好的熟练控制android界面的编辑和操作,所以我的一个急着要的运用就改为html5版本号了,反正这个运用也是须要从server获取大量数据来展示在手机上面的,也就是说:必须联网,才干正常工作,于是想了一下,反正都要联网获取数据,为什么不直接用我相对熟悉一点的 html来做这个运用呢?省的花费不够用的时间去学习android界面的控制,于是就简单了:用蹩脚的手段做了一个android程序的启动欢迎界面,内页就是一个全屏的

Android Handler的一个简单使用例子

在前面 开启一个线程Thread并用进度条显示进度 这篇文章里,我们用线程实现了这么一个简单的功能,就是点击按钮,加载进度条.但是有没有发现,点击一次之后,再次点击就会没效.我们可是需要每次点击都要显示下一张图片的.永盈会娱乐城 这里就需要引入 Android 的消息机制了,简单来说,就是 Handler.Looper 还有 Message Queue的使用.这里我们用一个简单的例子来说明 Handler 的使用,就是每次点击按钮,给消息队列发送一个数字 5.还是在 PaintingActivi