`
文章列表

组播Socket基础

组播是比单播宽比广播窄的目标性更强的点对点通信。组播将数据从一台主机发送给多个不同 的主机。数据只传到某些通过加入组播组的客户端。 程序员和网络管理员不用负责选择在哪些点上复制数据,甚至不用负责发送多个副本。 Internet路由器会处理这些事情。 应用程序只将数据报包发送给组播地址,路由器将确保包被发送到改组播组中的所有主机。 组播地址:称为组播组的一组主机所共享的地址。组播地址的范围在224.0.0.0--- 239.255.255.255之间(都为D类地址 1110开头)。 从应用程序来讲组播和普通UDP socket之间的区别在于必须考虑TTL值。这时IP首部中取值 0- ...

HashMap原理

概述: HashMap是基于哈希表的Map接口的非同步实现。此实现提供所有可选的映射操作,并允许使用null值和null键。此类不保证映射的顺序,特别是它不保证该顺序恒久不变。 HashMap的数据结构: HashMap实际上是一个“链表散列”的数据结构,即数组和链表的结合体 transient Entry[] table; static class Entry<K,V> implements Map.Entry<K,V> { final K key; V value; Entry<K,V> next; fina ...
UDP是在IP上发送数据的另一种协议。不可靠,无法知道数据是否到达,也无法知道数据的不同 部分是否已发送时的数据到达。 UDP为什么有使用之地:在实时音频或视频中丢失或交换数据包只会出现噪声。噪声是可以容忍 的。 ...
接口回调:    实现了接口的类创建对象的引用赋值给接口变量,那么接口变量就可以调用接口实现类的方法,这就称为接口回调。(通知相应的对象调用相应的方法) public interface CallBack { void execute(); } public class Tools { public void testTime(CallBack callBack) { long begin = System.currentTimeMillis(); callBack.execute(); long end = System.currentTimeM ...
使用内部类在java编程高级设计中是必须的,它能使你的代码更加优雅,但是它最大的作用是解决class单继承的问题。 例如: public interface One { public void inOne(); } public interface Two { public void inTwo(); } public class CommonClass implements One,Two { public void inOne(){ System.out.println ...
ServerSocket 的生命周期: 1.创建ServerSocket对象 2.使用accept()方法 监听端口的入站连接 3.调用Socket的getInputStream()与getOutputStram()获得客户端通信的流 4.服务器和客户端根据协商的协议交互 5.服务器或者客户端关闭连接 6.服务器返回2 等待下一个连接到来
Socket进行的操作步骤为: 1.连接远程服务器 2.本地和远程主机从socket取得输入流和输出流. 3.数据传输完毕,一端(Http)或者两端关闭连接. 构造函数Socket(String host,int port)throws UnknownHostException,IOExceptionm 的作用是 1.创建Socket对象 2尝试连接远程主机的socket 可以用此来确定端口是否占用,代码如下: String host="localhost"; for(int i=0;i<1024;i++) { try { Soc ...
服务器运行的时候可以监听多个客户端的连接请求。管理客户连接请求的任务是由操作系统来完成的。操作系统把这些连接请求存储在一个先进先出的队列中。许多操作系统限定了队列的最大长度,一般为50。当队列中的连接请求达到了队列的最大容量时,服务器进程所在的主机会拒绝新的连接请求。只有当服务器进程通过ServerSocket 的accept()方法从队列中取出连接请求,使队列腾出空位时,队列才能继 续加入新的连接请求。     如果客户进程发出的连接请求被服务器拒绝,Socket 构造方法就会抛出 ConnectionException。 例如:如下测试代码 public class Client { ...
我们可以从ByteBuffer中产生出不同类型值的方法   public class Test{ public static final int BSIZE=1024; public static void main() { ByteBuffer bb=ByteBuffer.allocate(BSIZE); int i=0; while(i++<bb.limit()) if(bb.get()!=0) System.out ...

Service

public class MainActivity extends Activity implements OnClickListener { /** Called when the activity is first created. */      private Button startService,redirectButton;         public static MainActivity mainActivity;     @Override      public void onCreate(Bundle savedInstanceState) {        ...
   实际开发种LayoutInflater这个类还是非常有用的,它的作用类似于 findViewById(),不同点是LayoutInflater是用来找layout下xml布局文件,并且实例化!而findViewById()是找具体xml下的具体 widget控件(如:Button,TextView等)。     LayoutInflater经常用在类似弹出对话框或者弹出界面这类应用中,类似于web应用中的div弹出层。    为了让大家容易理解我做了一个简单的Demo,主布局main.xml里有一个TextView和一个Button,当点击Button,出现 Dialog,而这个Dia ...
为了查看Activity切换经历的生命周期,首先看下面代码: 布局文件 main.xml文件 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" a ...
本程序主要功能步骤如下:    1.利用Timer 编写一个倒计时程序,程序使用Timer和TimerTask来完成倒计时     2.同时使用sendMessages方法发送消息     3.在HanleMessage里更新UI。 最原始的代码方式:     1.事件处理方式使用匿名内部类      2.TimerTask实现也使用匿名内部类 缺点:1.代码通用性差 2.阅读性差       private Button button1,button2; private TextView tv;//显示计时内容 private Handler hand ...
Service是android 系统中的一种组件,它跟Activity的级别差不多,但是他不能自己运行,只能后台运行,并且可以和其他组件进行交互。Service的启动有两种方式:context.startService() 和 context.bindService()。 使用context.startService() 启动Service是会会经历: context.startService() ->onCreate()- >onStart()->Service running context.stopService() | ->onDestroy() -> ...
Grally是可以水平滚动列表元素的布局,一般用来滚动图片。 以下为简单例子:layout文件: <?xml version="1.0" encoding="utf-8"?><Gallery xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/gallery" android:layout_width="fill_parent" android:layou ...
Global site tag (gtag.js) - Google Analytics