Android(java)学习笔记57:PC and Phone 通信程序
1. 首先我写的程序代码如下:
package com.himi.udpsend; import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.DatagramSocketImpl;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException; import android.app.Activity;
import android.content.Context;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText; public class MainActivity extends Activity implements OnClickListener {
private EditText edittext;
private Button btnsend;
private WifiInfo wifiInfo; //类Wifiinfo,WifiInfo获取各种Wifi各种信息
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); edittext = (EditText)findViewById(R.id.edit);
btnsend = (Button)findViewById(R.id.btnsend); btnsend.setOnClickListener(this); WifiManager wman = (WifiManager) getSystemService(Context.WIFI_SERVICE); if(! wman.isWifiEnabled()) {
wman.setWifiEnabled(true);
}
Log.e("ip", intToIp(wifiInfo.getIpAddress()));//获得本机ip } public String intToIp(int i) {
return (i & 0xff) +"."+
((i>>8) & 0xff )+"."+
((i>>16) & 0xff )+"."+
((i>>24) & 0xff ); } public void onClick(View v) { try {
// 创建发送端socket对象
DatagramSocket ds = new DatagramSocket(); // 创建数据并打包
String edit_content = edittext.getText().toString();
byte[] bys = edit_content.getBytes();
int length = bys.length; String ip = intToIp(wifiInfo.getIpAddress());
InetAddress hostip = InetAddress.getByName(ip); int port = 10086;
DatagramPacket dp = new DatagramPacket(bys, length, hostip, port); //发送数据包
ds.send(dp);
//关闭套接字,回收资源
ds.close(); } catch (Exception e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
} } }
2. 报错如下:
06-26 02:37:29.270: E/Trace(841): error opening trace file: No such file or directory (2)
06-26 02:37:30.400: D/AndroidRuntime(841): Shutting down VM
06-26 02:37:30.400: W/dalvikvm(841): threadid=1: thread exiting with uncaught exception (group=0x40a71930)
06-26 02:37:30.540: E/AndroidRuntime(841): FATAL EXCEPTION: main
06-26 02:37:30.540: E/AndroidRuntime(841): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.himi.udpsend/com.himi.udpsend.MainActivity}: java.lang.NullPointerException
06-26 02:37:30.540: E/AndroidRuntime(841): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
06-26 02:37:30.540: E/AndroidRuntime(841): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
06-26 02:37:30.540: E/AndroidRuntime(841): at android.app.ActivityThread.access$600(ActivityThread.java:141)
06-26 02:37:30.540: E/AndroidRuntime(841): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
06-26 02:37:30.540: E/AndroidRuntime(841): at android.os.Handler.dispatchMessage(Handler.java:99)
06-26 02:37:30.540: E/AndroidRuntime(841): at android.os.Looper.loop(Looper.java:137)
06-26 02:37:30.540: E/AndroidRuntime(841): at android.app.ActivityThread.main(ActivityThread.java:5041)
06-26 02:37:30.540: E/AndroidRuntime(841): at java.lang.reflect.Method.invokeNative(Native Method)
06-26 02:37:30.540: E/AndroidRuntime(841): at java.lang.reflect.Method.invoke(Method.java:511)
06-26 02:37:30.540: E/AndroidRuntime(841): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
06-26 02:37:30.540: E/AndroidRuntime(841): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
06-26 02:37:30.540: E/AndroidRuntime(841): at dalvik.system.NativeStart.main(Native Method)
06-26 02:37:30.540: E/AndroidRuntime(841): Caused by: java.lang.NullPointerException
06-26 02:37:30.540: E/AndroidRuntime(841): at com.himi.udpsend.MainActivity.onCreate(MainActivity.java:41)
06-26 02:37:30.540: E/AndroidRuntime(841): at android.app.Activity.performCreate(Activity.java:5104)
06-26 02:37:30.540: E/AndroidRuntime(841): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
06-26 02:37:30.540: E/AndroidRuntime(841): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
06-26 02:37:30.540: E/AndroidRuntime(841): ... 11 more
06-26 02:37:34.910: I/Process(841): Sending signal. PID: 841 SIG: 9
原因:空指针异常,这时就要查看自己的程序中是否存在空指针。
4. 解决办法是:
package com.himi.udpsend; import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.DatagramSocketImpl;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException; import android.app.Activity;
import android.content.Context;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText; public class MainActivity extends Activity implements OnClickListener {
private EditText edittext;
private Button btnsend;
private WifiInfo wifiInfo;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); edittext = (EditText)findViewById(R.id.edit);
btnsend = (Button)findViewById(R.id.btnsend); btnsend.setOnClickListener(this); WifiManager wman = (WifiManager) getSystemService(Context.WIFI_SERVICE); if(! wman.isWifiEnabled()) {
wman.setWifiEnabled(true);
}//没有正确使用Log()
//Log.e("ip", intToIp(wifiInfo.getIpAddress()));//获得本机ip } public String intToIp(int i) {
return (i & 0xff) +"."+
((i>>8) & 0xff )+"."+
((i>>16) & 0xff )+"."+
((i>>24) & 0xff ); } public void onClick(View v) { try {
// 创建发送端socket对象
DatagramSocket ds = new DatagramSocket(); // 创建数据并打包
String edit_content = edittext.getText().toString();
byte[] bys = edit_content.getBytes();
int length = bys.length; String ip = intToIp(wifiInfo.getIpAddress());
InetAddress hostip = InetAddress.getByName(ip); int port = 10086;
DatagramPacket dp = new DatagramPacket(bys, length, hostip, port); //发送数据包
ds.send(dp);
//关闭套接字,回收资源
ds.close(); } catch (Exception e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
} } }
附加:
DatagramSocket:套接字用来UDP通信
DatagramPacket:用来包装UDP通信数据包
InetAddress:是Java对IP地址的封装
Android(java)学习笔记57:PC and Phone 通信程序的更多相关文章
- 0038 Java学习笔记-多线程-传统线程间通信、Condition、阻塞队列、《疯狂Java讲义 第三版》进程间通信示例代码存在的一个问题
调用同步锁的wait().notify().notifyAll()进行线程通信 看这个经典的存取款问题,要求两个线程存款,两个线程取款,账户里有余额的时候只能取款,没余额的时候只能存款,存取款金额相同 ...
- 0028 Java学习笔记-面向对象-Lambda表达式
匿名内部类与Lambda表达式示例 下面代码来源于:0027 Java学习笔记-面向对象-(非静态.静态.局部.匿名)内部类 package testpack; public class Test1{ ...
- 《Java学习笔记(第8版)》学习指导
<Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...
- Android动画学习笔记-Android Animation
Android动画学习笔记-Android Animation 3.0以前,android支持两种动画模式,tween animation,frame animation,在android3.0中 ...
- Java学习笔记:语言基础
Java学习笔记:语言基础 2014-1-31 最近开始学习Java,目的倒不在于想深入的掌握Java开发,而是想了解Java的基本语法,可以阅读Java源代码,从而拓展一些知识面.同时为学习An ...
- Android 数字签名学习笔记
Android 数字签名学习笔记 在Android系统中,所有安装到系统的应用程序都必有一个数字证书,此数字证书用于标识应用程序的作者和在应用程序之间建立信任关系,如果一个permission的pro ...
- Java学习笔记4
Java学习笔记4 1. JDK.JRE和JVM分别是什么,区别是什么? 答: ①.JDK 是整个Java的核心,包括了Java运行环境.Java工具和Java基础类库. ②.JRE(Java Run ...
- java学习笔记04--数组
java学习笔记04--数组 数组复制的方法是使用System类提供的arraycopy()方法,其语法如下: System.arraycopy(Object src, int srcPos, Obj ...
- java学习笔记07--日期操作类
java学习笔记07--日期操作类 一.Date类 在java.util包中定义了Date类,Date类本身使用非常简单,直接输出其实例化对象即可. public class T { public ...
- 【Java学习笔记之二十六】深入理解Java匿名内部类
在[Java学习笔记之二十五]初步认知Java内部类中对匿名内部类做了一个简单的介绍,但是内部类还存在很多其他细节问题,所以就衍生出这篇博客.在这篇博客中你可以了解到匿名内部类的使用.匿名内部类要注意 ...
随机推荐
- Form表单的几种提交方式
<script type="text/javascript"> $(function() { //1.ajax提交 $("#ajaxBtn").cl ...
- PIE SDK聚类
1.算法功能简介 聚类处理时运用形态学算子将临近的类似分类区域聚类并合并. PIE SDK支持算法功能的执行,下面对聚类算法功能进行介绍. 2.算法功能实现说明 2.1. 实现步骤 第一步 算法参数设 ...
- 什么是RFID? 射频识别技术的特点及工作原理!
RFID即Radio Frequency Identifcation,就是射频识别技术,这篇给大家讲述的就是这个射频识别技术.这里就涉及到射频,电磁学等等知识.看完这篇,你应该会对这些知识有些了解,大 ...
- C. Molly's Chemicals
题目链接:http://codeforces.com/problemset/problem/776/C C. Molly's Chemicals time limit per test 2.5 sec ...
- vs2012 使用方法汇总
1)安装Vsiual Assist插件 工具栏-->tools-->Extentsions and Upates-->点击左边的Online然后右边会出现可以安装的插件,找到Visu ...
- 【Linux】网络性能测试工具iperf详细使用图文教程【转】
参考链接:https://www.cnblogs.com/yingsong/p/5682080.html Iperf是一个网络性能测试工具.Iperf可以测试TCP和UDP带宽质量. Iperf可以测 ...
- 搭建Vue2.0开发环境
1.必须要安装nodejs 2.搭建vue的开发环境 ,安装vue的脚手架工具 官方命令行工具 npm install --global vue-cli / cnpm install --global ...
- js之正则表达式基础
字符串是编程时涉及到的最多的一种数据结构,对字符串进行操作的需求几乎无处不在.比如判断一个字符串是否是合法的Email地址,虽然可以编程提取@前后的子串,再分别判断是否是单词和域名,但这样做不但麻烦, ...
- Django的路由层(URLconf)
URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表:你就是以这种方式告诉Django,对于客户端发来的某个URL调用哪一段逻辑代码 ...
- Django的模型层
一.ORM简介 MVC或者MVC框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库,这极大的减轻了开发人 ...