- 浏览: 72960 次
- 性别:
- 来自: 西安
文章分类
NIO连接socket
一个是服务器端,一个是客户端,都是用NIO连接的,代码如下
客户端:
一个是服务器端,一个是客户端,都是用NIO连接的,代码如下
package testnio; import java.net.InetSocketAddress; import java.nio.ByteBuffer; import java.nio.channels.SelectionKey; import java.nio.channels.Selector; import java.nio.channels.ServerSocketChannel; import java.nio.channels.SocketChannel; import java.util.Set; public class Receive { public static void main(String[] args) throws Exception { boolean b = true; ByteBuffer buffer = ByteBuffer.allocate(1024); ServerSocketChannel ss = ServerSocketChannel.open(); ss.socket().bind(new InetSocketAddress(8888)); ss.configureBlocking(false); Selector se = Selector.open(); ss.register(se, SelectionKey.OP_ACCEPT); while (se.select() > 0) { Set<SelectionKey> set = se.selectedKeys(); System.out.println("进入一个循环,大小是:" + set.size()); for (SelectionKey key : set) { int ops = key.readyOps(); System.out.println("ops=" + ops); if ((ops & SelectionKey.OP_ACCEPT) == SelectionKey.OP_ACCEPT) { SocketChannel sc = ss.accept(); System.err.println("有新的连接了" + sc); System.err.println("地址是:" + sc.socket()); sc.configureBlocking(false); sc.register(se, SelectionKey.OP_READ); } if ((ops & SelectionKey.OP_READ) == SelectionKey.OP_READ) { System.err.println("有新的读取"); SocketChannel sc = (SocketChannel) key.channel(); System.out.println(sc.isConnected()); sc.read(buffer); buffer.flip(); //System.out.println(new String(buffer.array())); Thread.sleep(5000); if (b) { b = false; sc.write(buffer); } } } set.clear(); System.out.println("退出循环"); } } }
客户端:
package testnio; import java.net.InetSocketAddress; import java.nio.ByteBuffer; import java.nio.channels.SelectionKey; import java.nio.channels.Selector; import java.nio.channels.SocketChannel; import java.util.Set; public class Send { public static void main(String[] args) throws Exception { SocketChannel sc = SocketChannel.open(); ByteBuffer buffer = ByteBuffer.allocate(1024); Selector se = Selector.open(); buffer.put("我是中国人,我爱我的祖国,hadeslee".getBytes()); buffer.flip(); sc.configureBlocking(false); sc.register(se, SelectionKey.OP_CONNECT | SelectionKey.OP_READ | SelectionKey.OP_WRITE); sc.connect(new InetSocketAddress("172.0.0.1", 8888)); while(!sc.finishConnect()); sc.write(buffer); System.out.println("进入循环"); Thread.sleep(10000); int sum = se.select(); while (se.select() > 0) { Thread.sleep(100); System.out.println("终于大于0了"); Set<SelectionKey> set = se.selectedKeys(); System.out.println("大小是:"+set.size()); for (SelectionKey key : set) { int ops = key.readyOps(); if ((ops & SelectionKey.OP_CONNECT) == SelectionKey.OP_CONNECT) { sc.write(buffer); System.out.println("连接成功"); } if ((ops & SelectionKey.OP_READ) == SelectionKey.OP_READ) { System.out.println(" 收到东西"); sc.read(buffer); buffer.flip(); System.out.println("收到的是:" + new String(buffer.array(),0,buffer.limit())); sc.write(buffer); } } se.selectedKeys().clear(); } } private static ByteBuffer[] get(String heads) { ByteBuffer[] bbs = new ByteBuffer[heads.length]; for (int i = 0; i < bbs.length; i++) { String s = heads[i]; bbs[i] = ByteBuffer.allocateDirect(1024); bbs[i].put(s.getBytes()); bbs[i].flip(); } return bbs; } }
发表评论
-
postgres java
2013-04-21 22:51 723postgres sql jdbc doc -
java NIO入门教程和实例代码
2012-03-19 23:32 816java NIO入门教程和实例代码 -
Java中ArrayList和LinkedList区别
2011-08-23 00:06 749一般大家都知道ArrayList和LinkedList的大致区 ... -
Hashtable和HashMap的区别
2011-08-22 23:04 766HashTable的应用非常广泛 ... -
Java中null关键字的用法
2011-08-22 23:03 1572一、null是代表不确定的对象Java中,null是一个关键字 ... -
java 文件锁
2011-02-21 01:02 31461:在javaN(new)IO 中提供了文件锁的功能, 这样 ... -
一个关于抽象类和接口的程序题
2011-01-06 20:10 751程序改错题: 原题是: package com. ... -
利用java可变参数初始化数组
2010-12-30 22:12 1415前几天初始化一维数组时 ,突发奇想利用java 5.0 以 ... -
java数组的排序和求数组中的最大值和最小值
2010-12-30 22:02 57922010-12-28 到 博彦科技去面试的一个面试题 ... -
java二维数组
2010-12-30 21:53 1286java 二维数组前几天面试时, 面试提既然考的是二维数组。 ... -
Java一道题
2009-09-07 15:16 1498最近闲着没事, 拿出java课本的两道题 ,用烦了Struts ... -
java5.0以后才有的枚举类型2
2009-09-06 17:48 968可以通过enum关键字来定义枚举类型时,例如下形式: ... -
java5.0以后才有的枚举类型1
2009-09-06 17:15 805在程序中经常要用到一些常数。 在jdk1.4 以前我们只能通过 ... -
java5.0以后才有的可变参数的方法
2009-09-05 15:29 1090java5.0以后才有的可变参数的方法,形式如下: 方法名 ... -
java 5.0以后才有的for循环2
2009-09-04 23:25 915//假设已有一个User[] us 的非空数组。 fo ... -
java 5.0以后才有的for循环
2009-09-04 22:55 772java 5.0以后才有的for循环 它主要和泛型结合才好用。 ...
相关推荐
使用NIO socket不需要多线程来处理多个连接的请求,效率非常高 可以作为NIO socket入门的例子,Reactor模式,重点理解key.attach, jar文件里包含了源代码 1,运行server.bat启动服务器,可以打开编辑,修改端口号 ...
java NIO 高性能 socket通讯,服务端采用单线程,降低了cpu的压力,普通io socket通讯,server需要每个连接运行个线程,容易出现问题,效率也低
Java NIO中的SocketChannel是一个连接到TCP网络套接字的通道。可以通过以下2种方式创建SocketChannel: 打开一个SocketChannel并连接到互联网上的某台服务器。 一个新连接到达ServerSocketChannel时,会创建一个...
信息来自http://ifeve.com/server-socket-channel/ Java NIO: Channels and ...Java NIO引入了选择器的概念,选择器用于监听多个通道的事件(比如:连接打开,数据到达)。因此,单个的线程可以监听多个数据通道。
[第4节] JavaNIO流-通道1.flv [第5节] Java NIO流-通道2.flv [第6节] Java NIO流-socket通道操作.flv [第7节] Java NIO流-文件通道操作.flv [第8节] Java NIO流-选择器 .flv [第9节] Java NIO流-选择器操作.flv...
java socket client 断线重连的简单实现 有什么意见可以提哦
利用socketNIO实现的多客户端聊天室,非阻塞式IO,java代码编写,使用方法:先启动服务端代码再启动客户端代码,可启动多个客户端代码。若使用多个电脑启动客户端,需在客户端代码中更改一下ip地址。
TCP NIO socket TCP服务器,支持多个客户端连接
网络通信工具,服务端和客户端连接测试工具,可单条发送,循环发送,模拟多客户端发送,本工具可以作为网络通信工具或压力测试工具, Java NIO Socket编程,需JAVA运行环境
Socket长连接+心跳包+发送+读取,用到的全在这里了,自己看看哪里不需要的就不要添加了!代码很清晰很明白了!
import java.nio.channels.SocketChannel; import java.util.Iterator; import com.nio.user.ClientUser; import com.nio.user.ClientUserManager; import com.nio.user.UserData; public class NIOClient { ...
基于java tcp socket通信的拆包和装包源码 功能 1)编写一个 NIO 群聊系统,实现服务器端和客户端之间的数据简单通讯(非阻塞) 2)实现多人群聊 3)服务器端:可以监测用户上线,离线,并实现消息转发功能 4)客户端:...
java.nio包提供了支持非阻塞通信的类,主要包括: ● ServerSocketChannel:ServerSocket的替代类,支持阻塞通信与非阻塞通信。 ● SocketChannel:Socket的替代类,支持阻塞通信与非阻塞通信。 ● Selector:为...
6.NioFile.java nio操作文件读写 7.ImageThumbnail.java 生成图片缩略图 8.JsonObjs.java json简单操作 9.HttpProxy.java 代理设置 10.CaptureScreen.java 截取桌面 11.XmlReaer.java 读写xml文件 12.ArrayConvers...
第3章,结合905.4-2014协议的基本内容,动手实现NIO长连接服务端的实现,以及协议内容的设计和实现思路; 第4章,实现长连接客户端,以及采用多线程技术进行系统性能测试; 第5章,介绍Netty相关基础知识,并使用...
NULL 博文链接:https://sariel.iteye.com/blog/470383
Naga 的目标是成为一个非常小的 NIO 库,它提供了一些 java 类来用异步 NIO 对应物(类似于为 Java 1.7 计划的 NIO2)包装通常的 Socket 和 ServerSocket。 所有这些都是从单个线程驱动的,使其对客户端(例如,...
Netty是基于Java NIO client-server的网络应用框架,使用Netty可以快速开发网络应用
JAVA SOCKET 编程的经典之书,(中文版)里面的代码可直接复制使用! 目录: 第1章简介..........3 1.1 计算机网络,分组报文和协议..........3 1.2 关于地址..........6 1.3 关于名字..........8 1.4 客户端...