import java.net.*;
import java.nio.channels.*;
import java.nio.*;
import java.io.*;
import java.nio.charset.*;
public class EchoClient {
private SocketChannel socketChannel = null;
public EchoClient() throws IOException {
socketChannel = SocketChannel.open(); // 打开通道
// 设置连接地址和端口
InetAddress ia = InetAddress.getLocalHost();
InetSocketAddress isa = new InetSocketAddress(ia, 8001);
try {
socketChannel.connect(isa);// 连接远端
System.out.println("与服务器的连接建立成功");
} catch (ConnectException ce) {
System.out.println("服务器无应答!");
}
}
public void talk() throws IOException {
try {
BufferedReader br = getReader(socketChannel.socket());
PrintWriter pw = getWriter(socketChannel.socket());
BufferedReader localReader = new BufferedReader(
new InputStreamReader(System.in));
String msg = null;
while ((msg = localReader.readLine()) != null) {
pw.println(msg);
System.out.println(br.readLine());
if (msg.equals("bye"))
break;
}
} catch (IOException e) {
} finally {
try {
socketChannel.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
private PrintWriter getWriter(Socket socket) throws IOException {
OutputStream socketOut = socket.getOutputStream();
return new PrintWriter(socketOut, true);
}
private BufferedReader getReader(Socket socket) throws IOException {
InputStream socketIn = socket.getInputStream();
return new BufferedReader(new InputStreamReader(socketIn));
}
public static void main(String args[]) throws IOException {
new EchoClient().talk();
}
}
分享到:
相关推荐
开发依赖于线程池和非阻塞I / O的可伸缩服务器来处理高网络流量。 该实现包括两个组件,一个服务器和多个客户端(最少100个客户端)。 服务器从客户端接受传入的网络连接,从这些连接接收传入的流量,并通过发送回...
commons-aws, 通用AWS服务的流式/异步 Scala 客户端 通用AWS服务的流/异步 Scala 客户端通用AWS服务的流式/异步 Scala 客户端。 如果可能,客户端公开返回流的Akka ...客户端使用内部管理的线程池,并针对阻塞操作进行
- 线程池ThreadPoolExecutor - 阻塞队列BlockingQueue,生产者消费者模式 - Selector - Channel - ByteBuffer - ProtoStuff 高性能序列化 - HttpClient连接池 - Spring依赖注入 - lombok简化POJO开发 - ...
3.读消息消费者线程池中派遣一个就绪线程从客户端读取数据包DataPacket,并触发onReaded事件 4.开发人员在onReaded事件编写逻辑代码,并且决定读入的数据包的去向(返回给客户端,还是结束) 5.若在onReaded事件里,...
什么是QIO,Q可以理解为 Quick(快速),也可以理解 Queue(队列),实际上其原理就是一个快速的任务队列操作,内部包涵高效的线程池任务分配代码,可以把VTCP内部事件快速的分配给应用层的线程池进行并行的处理。...
基于普通线程池的处理模式,也存在队列阻塞的问题——若干个客户端请求的耗时操作,阻塞了其他客户端的响应,哪怕其他客户端的请求很短时间就能处理完毕,也必须排队等待。采用流水线线程池避免了这个问题。每个...
同步:阻塞式调用,调用方必须等待响应方执行完毕才会返回 例如:A接口调用B接口,B接口有内部的逻辑实现,再将B接口执行接口返回给A接口 1.大多数非异步场景(不用异步,就用同步来调用) 如:百度搜索,客户端...
线程池ThreadPoolExecutor 阻塞队列BlockingQueue,生产者消费者模式 Selector Channel ByteBuffer ProtoStuff 高性能序列化 HttpClient连接池 Spring依赖注入 lombok简化POJO开发 原子变量 内置锁 ...
线程池ThreadPoolExecutor 阻塞队列BlockingQueue,生产者消费者模式 选择器 渠道 字节缓冲区 ProtoStuff 高性能序列化 HttpClient连接池 Spring依赖注入 lombok简化POJO开发 原子指标 内置锁 竣工服务 log4j+slf4j...
单线程方法: 基于事件的非阻塞范例避免上下文切换,锁定和阻塞所做的更改: 提交完成后,通过从池中选择线程,查询响应将发送到客户端。 使用线程池中的线程可最大程度地减少线程创建所带来的开销。 线程对象占用...
你只要在程序中的任意地方添加一个TIdAntiFreeze对象,就能在客户程序中利用到阻塞式Socket的所有优点而避开它的一些显著缺点。 Indy使用了线程技术 阻塞式Socekt通常都采用线程技术,Indy也是如此。从最底层...
伪异步 IO:将请求连接放入线程池,一对多,但线程还是很宝贵的资源。 NIO:一个请求一个线程,但客户端发送的连接请求都会注册到多路复用器上,多路复用 器轮询到连接有 I/O 请求时才启动一个线程进行处理。 AIO:...
2)封装线程池管理模型,支持多连接的并发服务器; 3)同时支持多服务器和多客户端的混合模式,特别适合于P2P系统开发; 4)线程异常退出保护机制; 5)简便的编程接口; 6)易扩展的数据封包方式; 7)低层采用...
java8 看不到源码NioSmtp客户端 基于 .Java 的高性能 SMTP 客户端。 该客户端在 HubSpot 中经过充分测试并大量使用。...调用未知函数(即回调或事件侦听器)应始终在隔离的线程池上完成。 还应该避
并且提交到线程池执行 4)返回(2) 接收数据线程 LogReceiver 1)接收用户的Request 2)获取用户发送过来的 LogRec集合数据 3)推送数据到阻塞队列中 4)如果推送成功就发送Response(200) 5) 如果推送...
1. 线程池 + 非阻塞 socket + epoll + 事件处理的并发模型 2. 状态机解析HTTP请求 3. 心跳机制 4. 简易日志系统 主要内容: 1. 使用 socket 实现服务器和浏览器客户端的通信; 2. 用 epoll 事件检测技术实现 IO 多...
BIO:同步并阻塞,服务器实现一个连接一个线程,即客户端有连接请求时服务器端就需要启动一 个线程进行处理,没处理完之前此线程不能做其他操作(如果是单线程的情况下,我传输的文件很 大呢?),当然可以通过...
像libevent, libev, and libuv , libhv提供具有非阻塞IO和计时器的事件循环,但具有更简单的api和更丰富的协议。 产品特点 跨平台(Linux,Windows,Mac,Solaris) 事件循环(IO,计时器,空闲) ENABLE_IPV6 ...
-快速线程池,可动态调整线程数; -简化常见的线程启动/停止方案; 极快的轻量级信号灯; 具有阻塞的线程安全队列(比BlockingCollection快5倍); 允许控制客户端输入的一些代码块; 允许限制每秒的最大请求数; -...
在 C/S 网络编程中,数据的发送和接收通过Socket 套接口完成,套接字分为阻塞式和非阻塞式[1]。 通过对Java Net框架下GUI技术、通信协议等关键技术的分析,本通信器决定采用如下技术方案: (1) Swing技术开发GUI...