java socket编程开发简单例子 与 nio非阻塞通道
基本socket编程
1、以下只是简单例子,没有用多线程处理,只能一发一收(由于scan.nextLine()线程会进入等待状态),使用时可以根据具体项目功能进行优化处理
2、以下代码使用了1.8新特性,如果要测试以下代码,java版本不能低于1.8
3、如果发送的信息需要安全保护,也可以使用安全套接字,SSLSocket例子
使用socket编程需要注意的两个方法,sendUrgentData 与 setOOBInline;sendUrgentData是发送紧急数据用,只可以发送ASCII码,可用于判断远程链接是否断开;setOOBInline设置是否接收紧急数据,默认false丢弃,特别注意的是开启接收紧急数据,在获取数据时,没有区分普通数据与紧急数据方法的支持。
// 客户端
public static void main(String[] args) {
try (Scanner scan = new Scanner(System.in);
Socket client = new Socket("127.0.0.1", 8484);
PrintWriter writer = new PrintWriter(client.getOutputStream());
BufferedReader reader = new BufferedReader(new InputStreamReader(client.getInputStream()));) {
while (true) {
// writer.print(scan.nextLine() + "\n");
// Writer 的 write(scan.nextLine() + "\n");方法
// 注意:由于服务器端是使用readLine,如果是用上面两种方式写入,必须加换行符,否则readLine是读取不到数据的
writer.println(scan.nextLine());
writer.flush();
while (reader.ready()) {
System.out.println(reader.readLine());
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
// 服务端
public static void main(String[] args) {
try (Scanner scan = new Scanner(System.in);
ServerSocket server = new ServerSocket(8484);
Socket sc = server.accept();
BufferedReader reader = new BufferedReader(new InputStreamReader(sc.getInputStream()));
PrintWriter writer = new PrintWriter(sc.getOutputStream());) {
while (true) {
writer.println(scan.nextLine());
writer.flush();
while (reader.ready()) {
System.out.println(reader.readLine());
}
} } catch (Exception e) {
e.printStackTrace();
}
}
nio非阻塞socket通道编程
这里简单介绍:参考源 http://www.ibm.com/developerworks/cn/education/java/j-nio/j-nio.html1、ServerSocketChannel 相当于封装的ServerSocket2、SocketChannel 相当于封装的Socket
3、通过将ServerSocketChannel 与 SocketChannel 注册到选择器Selector中
4、选择器中通过selector.select()线程堵塞的方式去获取有事件发生的Channel,类似于server.accept()的堵塞方式
5、如果有事件发生,通过selector.selectedKeys()获取到所有发生事件的注册信息
6、通过注册selectedKey获取到实际的通道对象
java socket编程开发简单例子 与 nio非阻塞通道的更多相关文章
- [转] 3个学习Socket编程的简单例子:TCP Server/Client, Select
以前都是采用ACE的编写网络应用,最近由于工作需要,需要直接只用socket接口编写CS的代码,重新学习这方面的知识,给出自己所用到的3个简单例子,都是拷贝别人的程序.如果你能完全理解这3个例子,估计 ...
- socket编程---一个简单例子
服务器端代码(单线程): import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamRe ...
- JAVA SOCKET编程单线程简单实例
服务端: package socketProgram; import java.io.BufferedReader;import java.io.IOException;import java.io. ...
- 170411、java Socket通信的简单例子(UDP)
服务端代码: package com.bobohe.socket; import java.io.*; import java.net.*; class UDPServer { public stat ...
- 170410、java Socket通信的简单例子(TCP)
服务端代码: package com.bobohe.socket; import java.io.*; import java.net.*; import java.applet.Applet; pu ...
- 再谈一次关于Java中的 AIO(异步IO) 与 NIO(非阻塞IO)
今天用ab进行压力测试时,无意发现的: Requests per second: xxx [#/sec] (mean) ab -n 5000 -c 1000 http://www:8080/up ...
- 如何为可扩展系统进行Java Socket编程
从简单I/O到异步非阻塞channel的Java Socket模型演变之旅 上世纪九十年代后期,我在一家在线视频游戏工资工作,在哪里我主要的工作就是编写Unix Unix Berkley Socket ...
- Java Socket编程题库
一. 填空题 ___ IP地址____用来标志网络中的一个通信实体的地址.通信实体可以是计算机,路由器等. 统一资源定位符URL是指向互联网"资源"的指针,由4部分组成:协议 ...
- Java Socket编程(转)
Java Socket编程 对于Java Socket编程而言,有两个概念,一个是ServerSocket,一个是Socket.服务端和客户端之间通过Socket建立连接,之后它们就可以进行通信了.首 ...
随机推荐
- codeblocks+Mingw 下配置开源c++单元测试工具 google test
google test 是google的c++开源单元测试工具,chrome的开发团队就是使用它. Code::Blocks 12.11(MinGW 4.7.1) (Windows版)Google T ...
- java中的方法重载与重写以及方法修饰符
1. 方法重载Overloading , 是在一个类中,有多个方法,这些方法的名字相同,但是具有不同的参数列表,和返回值 重载的时候,方法名要一样,但是参数类型和参数个数不一样,返回值类型可以相同,也 ...
- 基于SSL协议的双向认证 - 数字证书 [2]
1.1 数字证书 1.1.1 概念理解 一种文件的名称,例如一个机构或人的签名,能够证明这个机构或人的真实性.简而言之数字证书是一种网络上证明持有者身份的文件,同时还包括有公钥.证书是由国际 ...
- iOS开发——UI进阶篇(十二)事件处理,触摸事件,UITouch,UIEvent,响应者链条,手势识别
触摸事件 在用户使用app过程中,会产生各种各样的事件 一.iOS中的事件可以分为3大类型 触摸事件加速计事件远程控制事件 响应者对象在iOS中不是任何对象都能处理事件,只有继承了UIResponde ...
- canvas游戏小试:画一个按方向键移动的圆点
canvas游戏小试:画一个按方向键移动的圆点 自己对canvas,但又有一颗做游戏的心TT.然后记录一下对canvas的学习吧,用一个按方向键控制的小圆点来做练习.(编程时用了一些es6的语法) ...
- 用int类型表示最大公倍数
代码 #include<stdio.h> #include<stdlib.h> #include<limits.h> int main(void) { int m, ...
- dict.items vs six.iteritems
python2里面,dict.items返回的是数组,six.iteritems(dict)则返回生成器. 意味着,dict很大的时候,后者不占用内存. >>> import six ...
- 应用HTK搭建语音拨号系统3:创建绑定状态的三音素HMM模型
选自:http://maotong.blog.hexun.com/6261873_d.html 苏统华 哈尔滨工业大学人工智能研究室 2006年10月30日 声明:版权所有,转载请注明作者和来源 该系 ...
- 【微服务】SpringBoot、SpringCloud相关
深入学习微框架:Spring Boot: http://www.infoq.com/cn/articles/microframeworks1-spring-boot/ Spring Boot--2 ...
- SQL 大数据查询如何进行优化?
1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而 ...