- 浏览: 1204467 次
- 性别:
- 来自: 荆州
文章分类
- 全部博客 (396)
- Android 基础 (72)
- Java 基础 (42)
- Android(动画效果) (26)
- Android(自定义组件) (13)
- Android(手机服务) (38)
- Android(网络相关) (27)
- Android(多媒体) (12)
- Android(小技巧) (30)
- Android(用户界面) (39)
- 基础概念 (24)
- Android组件学习 (21)
- Android数据库相关 (11)
- 生活杂谈 (10)
- 调试技巧部分 (8)
- Sql Server相关 (1)
- Android(xml相关) (2)
- Android 开发 (12)
- 韩语学习 (4)
- Mac添加环境变量的三种方法 (1)
- iPhone开发 (1)
- Android Studio (1)
最新评论
-
ppfbsar:
下载网络文件到SD卡上 -
851228082:
好文!彻底理解单类型导入与按需导入的区别了。还有一点可以通过 ...
谈java的导入(import) -
麦田的设计者:
老乡啊
sqlite 数据库保存图片 -
sf_dream:
我要是读写list、map之类的集合呢
ObjectOutputStream和ObjectInputStream类的学习 -
xfyunyun:
博主,请问webview加载html字符串时怎么进行缓存处理呢 ...
WebView使用总结2(加载HTML内容形式的String)
直接贴上代码:
客户端:
服务器端:
最后说一句:此时服务器端的循环只有10次,在接受了10次数据后,Server端就不能接受到数据了.这个要注意一下.更详细点得描述,可以浏览这个地址:
http://hxdawxyhxdawxy.iteye.com/blog/1291266
总结一下:
客户端与服务器端的唯一区别在于:服务器所在IP地址、端口是固定的,所以客户端可以直接将该数据报发送给服务器,而服务器则需要根据接收到的数据报来决定将"反馈"数据报的目的地.
客户端:
package com.example; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.util.Scanner; public class UdpClient { /** 定义发送数据报的目的地. */ public static final int DEST_PORT = 30000; public static final String DEST_IP = "127.0.0.1"; /** 定义每个数据报的最大大小为4K */ private static final int DATA_LEN = 4096; /** 定义该客户端使用的DatagramSocket,它的唯一作用就是接收和发送数据 报. */ private DatagramSocket mSocket = null; /** 定义接收网络数据的字节数组 */ byte[] inBuff = new byte[DATA_LEN]; /** 以指定字节数组创建准备接受数据的DatagramPacket对象. Java使用 DatagramPacket来代表数据报. */ private DatagramPacket inPacket = new DatagramPacket(inBuff, inBuff.length); /** 定义一个用于发送的DatagramPacket对象 */ private DatagramPacket outPacket = null; public void init() throws IOException { try { /** * DatagramSocket(): * <p> * 创建一个DatagramSocket实例,并将该对象绑定到 本机默认IP地址、本机所有可用端口中随机选择的 某个端口。 * <p> * DatagramSocket(int prot): * <p> * 创建一个DatagramSocket实例,并将该对象绑定到 本机默认IP地址、指定端口。 * <p> * DatagramSocket(int port, InetAddress laddr): * <p> * 创建一个DatagramSocket实例,并将该对象绑定到 指定IP地址、指定端口。 */ mSocket = new DatagramSocket(); /** 初始化发送用的DatagramSocket,它包含一个长度 为0的字节数组. */ outPacket = new DatagramPacket(new byte[0], 0, InetAddress.getByName(DEST_IP), DEST_PORT); /** 创建键盘输入流. */ Scanner scan = new Scanner(System.in); /** 不断读取键盘输入. */ while (scan.hasNextLine()) { /** 将键盘输入的一行字符串转换字节数组 */ byte[] buff = scan.nextLine().getBytes(); /** 设置发送用的DatagramPacket里的字节数据 */ outPacket.setData(buff); /** 发送数据报 */ mSocket.send(outPacket); /** 读取Socket中的数据,读到的数据放在inPacket所封装的字节数组里. */ mSocket.receive(inPacket); System.out.println(new String(inBuff, 0, inPacket.getLength())); } } /** 使用finally块保证关闭资源. */ finally { if (mSocket != null) { mSocket.close(); } } } public static void main(String[] args) throws IOException { new UdpClient().init(); } }
服务器端:
package com.example; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; public class UdpServer { public static final int PORT = 30000; /** 定义每个数据报的最大大小为4K. */ private static final int DATA_LEN = 4096; /** 定义该服务器使用的DatagramSocket. */ private DatagramSocket socket = null; /** 定义接收网络数据的字节数组. */ byte[] inBuff = new byte[DATA_LEN]; /** 以指定字节数组创建准备接受数据的DatagramPacket对象. */ private DatagramPacket inPacket = new DatagramPacket(inBuff, inBuff.length); /** 定义一个用于发送的DatagramPacket对象. */ private DatagramPacket outPacket; /** 定义一个字符串数组,服务器发送该数组的的元素. */ String[] books = new String[] { "轻量级J2EE企业应用实战", "基于J2EE的Ajax宝典", "Struts2权威指南", "ROR敏捷开发最佳实践" }; public void init() throws IOException { try { /** 创建DatagramSocket对象. */ socket = new DatagramSocket(PORT); /** 采用循环接受数据. */ for (int i = 0; i < 10; i++) { /** 读取Socket中的数据,读到的数据放在inPacket所封装的字节数组里. */ socket.receive(inPacket); /** 判断inPacket.getData()和inBuff是否是同一个数组. */ System.out.println(inBuff == inPacket.getData()); /** 将接收到的内容转成字符串后输出. */ System.out.println(new String(inBuff, 0, inPacket.getLength())); /** 从字符串数组中取出一个元素作为发送的数据. */ byte[] sendData = books[i % 4].getBytes(); /** * 以指定字节数组作为发送数据、以刚接受到的DatagramPacket的源 * <p> * SocketAddress作为目标SocketAddress创建DatagramPacket. */ outPacket = new DatagramPacket(sendData, sendData.length, inPacket.getSocketAddress()); /** 发送数据. */ socket.send(outPacket); } } /** 使用finally块保证关闭资源. */ finally { if (socket != null) { socket.close(); } } } public static void main(String[] args) throws IOException { new UdpServer().init(); } }
最后说一句:此时服务器端的循环只有10次,在接受了10次数据后,Server端就不能接受到数据了.这个要注意一下.更详细点得描述,可以浏览这个地址:
http://hxdawxyhxdawxy.iteye.com/blog/1291266
总结一下:
客户端与服务器端的唯一区别在于:服务器所在IP地址、端口是固定的,所以客户端可以直接将该数据报发送给服务器,而服务器则需要根据接收到的数据报来决定将"反馈"数据报的目的地.
发表评论
-
WebView加载网页进度条显示
2012-03-06 19:52 2250重写WebChromeClient一个方法进行进度条显示: ... -
一种更灵活的数据传输方式:HTTP(2)
2011-12-16 11:18 2908HTTP是大多数应用程序中常用的与服务端交互的通讯方式 ... -
一种更灵活的数据传输方式:HTTP(1)
2011-12-16 10:52 1884使用WebService虽然 ... -
重用WebView的cache图片文件
2011-09-15 15:06 1951如何从WebView使用的cache文件夹中重复使用一些图片资 ... -
开,关闭GPRS的简单Demo
2011-06-09 10:54 2689Android应用中开,关闭GPRS的简单Demo,可能在有的 ... -
Intent打开各种类型文件
2011-04-10 18:22 4378//android获取一个用于打开PPT文件的intent ... -
图片Url保存为位图并进行缩放操作
2010-10-12 15:33 13091.通过传入图片url获取位图方法: public Bit ... -
判断手机有无网络
2010-09-15 16:18 2791ConnectivityManager cwjManage ... -
GoogleMap(通过输入地址,查询显示在google 地图上)
2010-08-15 10:18 4599主Activity: package net.blogja ... -
Android手机使用中国电信天翼上网设置
2010-08-07 16:01 3789众所周知Android手机的上网功能需要用到APN(网络接入点 ... -
GPS取得卫星个数
2010-08-07 15:09 2892LocationManager manager = (Lo ... -
连接服务器超时的Demo
2010-08-05 11:49 2377下面这个例子是连接网络超时的例子: package cn. ... -
下载网络文件到SD卡上
2010-08-02 19:07 3314下面一个一个类的来进行介绍: 1.DownLoadProgre ... -
下载网路图片到SD卡上新建文件夹当中
2010-07-27 22:52 31481.DownloadImages.java文件 packa ... -
sax方式解析xml文件(asset文件和网络文件)
2010-07-11 17:16 1928现在写了些博客后,变懒 ... -
xml中DOM对象的学习
2010-07-03 13:57 1232DOM的基本对象有5个:Doc ... -
DOM方式解析xml文件3(assets中xml文件)
2010-07-03 13:44 2522这个例子是进一步熟悉DOM解析xml文件的方法,附带基础的文档 ... -
DOM方式解析xml文件2(解析本地xml)
2010-07-01 20:42 1545这个与1的方法唯一不同的就是传递InputSource的参数: ... -
DOM方式解析xml文件1(解析网路xml)
2010-07-01 20:14 1537其实网上很多资料讲关 ... -
下载显示网路图片的例子
2010-07-01 10:46 1447一个很简单的例子,直接上代码: 1. ShowUrlImage ...
相关推荐
目 录 第1篇 Linux网络开发基础 第1章 Linux操作系统概述 2 1.1 Linux发展历史 2 1.1.1 Linux的诞生和发展 2 ...第10章 基于UDP协议的接收和发送 267 10.1 UDP编程框架 267 10.1.1 UDP编程框图 267
19.8 Winsock控件和基于UDP的客户/服务器计算 631 19.8.1 一个简单的基于UDP的服务器 632 19.8.2 一个简单的基于UDP的客户 633 19.8.3 客户/服务器交互的输出 635 19.9 Winsock 控件的其他属性、方法和事件 636 ...
基于JAVA的UDP服务器模型源代码,内含UDP服务器端模型和UDP客户端模型两个小程序,向JAVA初学者演示UDP C/S结构的原理。 简单聊天软件CS模式 2个目标文件 一个简单的CS模式的聊天软件,用socket实现,比较简单。 ...
基于JAVA的UDP服务器模型源代码,内含UDP服务器端模型和UDP客户端模型两个小程序,向JAVA初学者演示UDP C/S结构的原理。 简单聊天软件CS模式 2个目标文件 一个简单的CS模式的聊天软件,用socket实现,比较简单。 ...
独立打包,保证可解压,内含大量源码,网上搜集而来。 Visual.C++编程技巧精选500例源代码 内含各种例子(vc下...vc基于HTTP协议断点续传和多线程下载源代码 VC满屏开满玫瑰花 VC然输入框出现气球提示 调用系统自带...
由于oSIP是比较底层的SIP协议栈实现,新手较难上手,而官方的示例大都是一些伪代码,需要有实际的例子程序参考学习,而最好的例子就是同样官方发布的oSIP的扩展开发库exosip2,使用exoSIP可以很...
独立打包,保证可解压,内含大量源码,网上搜集而来。 Visual.C++编程技巧精选500例源代码 内含各种例子(vc下各种...vc基于HTTP协议断点续传和多线程下载源代码 VC满屏开满玫瑰花 VC然输入框出现气球提示 调用系统...
独立打包,保证可解压,内含大量源码,网上搜集而来。一共10几包,每个包几十兆。 Visual.C++编程技巧精选500例源代码 内含各种例子(vc下各种控件的使用方法、标题栏...vc基于HTTP协议断点续传和多线程下载源代码 VC...
独立打包,保证可解压,内含大量源码,网上搜集而来。一共10几包,每个包几十兆。 Visual.C++编程技巧精选500例源代码 内含各种例子(vc下各种控件的使用方法、标题栏...vc基于HTTP协议断点续传和多线程下载源代码 VC...
独立打包,保证可解压,内含大量源码,网上搜集而来。 Visual.C++编程技巧精选500例源代码 内含各种例子(vc下各种控件的使用方法、标题栏...vc基于HTTP协议断点续传和多线程下载源代码 VC满屏开满玫瑰花 VC然输入框...
目前的协议有如下一些特点: 1) 客户向服务器发送请求, 每个请求的长度不定. 请求的长度在第一个INT中指定. 2) 每个服务器通常会向多种客户提供服务, 例如, TS要同时向CP, NP提供服务, CP要向NP和其他CP提供服务, ...
11.6.2 DNS区数据文件 212 11.7 配置DNS服务器主域 215 11.7.1 添加本地域解析 215 11.7.2 添加虚拟域解析 217 11.8 授权委托 218 11.8.1 在sylvia上添加 subdomain. domain.cxm的授权 218 11.8.2 测试subdomain....
第9章 与运行环境交互 314 9.1 与用户互动 315 9.1.1 运行Java程序的参数 315 9.1.2 使用Scanner获取键盘输入 316 9.1.3 使用BufferedReader获取键盘输入 318 9.2 系统相关 319 9.2.1 System类 319 9.2.2 ...
§2.1 数据类型概述 ........................................................................................................14 2.1.1 什么是类型? .....................................................