`
ReFly
  • 浏览: 7291 次
  • 性别: Icon_minigender_1
  • 来自: 资阳
最近访客 更多访客>>
社区版块
存档分类
最新评论

多线程NIO客户端

阅读更多

package night;
import java.net .InetSocketAddress;
import java.io .IOException;
import java.io .BufferedReader;
import java.io .InputStreamReader;
import java.nio.ByteBuffer;
import java.nio.channels .SocketChannel;
import java.nio.channels.*;


public class Kfd extends Thread {

/**
* @param args
*/



public static void main(String[] args) {

    // TODO Auto-generated method stub
            new Kfd();
            System.out.println("请输入:");
}




static SocketChannel sc;
String host="127.0.0.1";
int port=10000;
ByteBuffer readbuf =ByteBuffer.allocate(1024);
ByteBuffer writebuf=ByteBuffer.allocate(1024);
InetSocketAddress ad=new InetSocketAddress(host,port);
public  Kfd  (){
start();
try {sc=SocketChannel.open();
Selector sl=Selector.open();
sc.configureBlocking(false);
//连接到server;
     sc.connect(ad);
     System.out.println("客服端连接成功");
     if(!sc.finishConnect()){
    System.out.print("客户端连接失败");
     }
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}



public void run() {
while(true){
try {
BufferedReader buf=
new BufferedReader
   (new InputStreamReader(System.in));
    String str =buf.readLine();
    byte[]pack=str.getBytes();
writebuf.clear();
writebuf.put(pack);
writebuf.flip();
System.out.println("到这里");
//发送
        send(sc);
        //接受
        recive(sc);
   
}
catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
}



private void recive(SocketChannel sc)throws IOException{
while(true){
if(sc.isConnectionPending()){
sc.read(readbuf);
}
readbuf.flip();
byte[]pack=null;
pack=new byte[readbuf.limit()];
//将缓冲的数据打包到数组中
readbuf.get(pack);
System.out.println(new String(pack.toString()));
}
}


private void send(SocketChannel sc){
while(true){
while(writebuf.hasRemaining()){
try {
sc.write(writebuf);

} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();

}
}

}
}





}

 

分享到:
评论

相关推荐

    多线程NIO客户端实例

    ### 多线程NIO客户端实例解析 #### 核心概念与原理 在深入解析这段代码之前,我们先来理解一下几个核心的概念:**多线程**、**NIO(Non-blocking I/O)**以及它们如何协同工作在客户端编程中。 - **多线程**:在...

    练练手,用mina2.0搭建一个nio客户端

    NIO是Java提供的一个扩展,与传统的阻塞I/O模型不同,它允许单线程处理多个连接,提高了系统资源利用率。 首先,我们需要了解Mina的基本组件,如Session、Filter和ProtocolDecoder/Encoder。Session代表了服务器与...

    java多线程nio服务器

    Java NIO服务器的多线程设计有助于提高服务器的并发性能,特别是在高并发场景下,可以有效地利用系统资源,避免大量线程导致的内存消耗和上下文切换开销。同时,通过选择器的使用,减少了对主线程的占用,使得服务器...

    NIO实现客户端之间通信

    这对于处理多个客户端连接非常有用,因为它避免了为每个连接创建单独线程的开销。 要实现客户端之间的通信,我们需要以下步骤: 1. **服务器端**: - 创建ServerSocketChannel并绑定到特定端口,监听客户端连接。...

    Java NIO实现多个客户端之间的消息互发,客户端与服务器完整代码

    Java NIO(Non-blocking Input/...在实际开发中,Java NIO的使用需要对多线程、网络编程以及NIO API有深入的理解。通过这种方式构建的系统可以高效地处理大量并发连接,非常适合于聊天、游戏等实时性要求高的应用场景。

    使用多线程的NIO构建简易的多线程java服务器

    在Java编程中,使用非阻塞I/O(Non-blocking Input/Output,NIO)和多线程技术可以构建高效、可扩展的服务器。本篇我们将深入探讨如何利用NIO和多线程来创建一个简单的Java服务器。首先,我们需要理解NIO的基本概念...

    JAVA NIO 异步通信客户端

    7. **Event Loop**: 在JAVA NIO客户端中,通常有一个事件循环(Event Loop),它不断地调用Selector的`select()`方法,处理就绪的通道。 8. **线程模型**: 由于NIO的异步特性,客户端可能使用单线程或多线程模型。...

    基于事件的_NIO_多线程服务器

    ### 基于事件的NIO多线程服务器解析 #### 概述 在Java的网络编程中,NIO(Non-blocking I/O)作为一种高效的数据处理模式,自JDK 1.4版本引入以来,逐渐成为了开发高性能网络应用的重要工具之一。与传统的阻塞I/O...

    Java NIO非阻塞服务端与客户端相互通信

    总之,Java NIO非阻塞服务端与客户端通信的关键在于利用非阻塞IO和选择器,实现高效的多路复用,有效利用系统资源,提升并发处理能力。通过实践本教程中的代码示例,你将能够清晰地理解这一概念并掌握其应用技巧。

    nio异步长连接服务端与客户端

    - **选择器(Selectors)**:允许单个线程监控多个通道的事件,提高了处理大量连接的效率。 2. **异步通信**: - **Java NIO的非阻塞特性**:在读写操作时,如果数据未准备好,不会阻塞线程,而是返回一个状态,...

    NIO 服务器客户端例子

    **NIO客户端(TestClient.java)的关键知识点:** 1. **套接字通道(SocketChannel)**:客户端通过`SocketChannel.open()`创建通道,并用`socketChannel.connect(new InetSocketAddress(serverAddress, serverPort...

    socket多线程支持客户端服务端长连接互发消息

    多线程技术则是提高程序并发性能的关键,当需要同时处理多个客户端连接时,多线程的优势尤为突出。本教程将深入探讨如何利用Java的Socket和多线程技术来构建一个能够支持长连接并实现双向通信的系统。 首先,让我们...

    Nio多线程CS收发信息问题(问题已经解决)

    本文将深入探讨在NIO环境下,如何实现多线程客户端和服务端的通信问题,以及该问题的解决方案。 首先,我们来理解NIO的核心组件。Selector是NIO中的关键角色,它可以监控多个通道(Channels)的事件,例如连接建立...

    Java Socket学习---nio实现阻塞多线程通信

    本篇文章将深入探讨如何使用Java NIO(非阻塞I/O)来实现阻塞多线程通信,这对于高性能服务器端应用尤其重要。我们将会分析`EchoServer.java`、`EchoClient.java`和`SocketUtils.java`这三个文件中的关键知识点。 ...

    java多线程程序设计:Java NIO+多线程实现聊天室

    java多线程程序设计:Java NIO+多线程实现聊天室 Java基于多线程和NIO实现聊天室 涉及到的技术点 线程池ThreadPoolExecutor 阻塞队列BlockingQueue,生产者消费者模式 Selector Channel ByteBuffer ProtoStuff 高...

    多线程精品资源--Java NIO+多线程实现聊天室.zip

    在这个“多线程精品资源--Java NIO+多线程实现聊天室”的压缩包中,我们可以推测它包含了一套关于如何使用Java NIO和多线程技术来创建一个实时聊天应用的教程或示例代码。 首先,多线程是Java中并行处理的基础。...

    一般Socket客户端与Mina NIO Socket客户端对比示例

    2. 并发能力:Mina NIO的并发能力远超普通Socket,因为其可以有效利用线程资源,处理更多连接。 3. 开发复杂度:Mina NIO需要对Java NIO有深入理解,而普通Socket相对简单,学习曲线较平缓。 4. 扩展性:Mina提供了...

    Java开发基于多线程和NIO实现聊天室源码+项目说明(含服务端+客户端).zip

    Java开发基于多线程和NIO实现聊天室源码+项目说明(含服务端+客户端).zip 涉及到的技术点 - 线程池ThreadPoolExecutor - 阻塞队列BlockingQueue,生产者消费者模式 - Selector - Channel - ByteBuffer - ...

    c++多线程线程池服务端和客户端例子

    在给定的"C++多线程线程池服务端和客户端例子"中,我们可以深入探讨以下几个关键知识点: 1. **C++11多线程库**: C++11标准引入了`<thread>`库,提供了对多线程的支持。在这个例子中,我们可能会看到如何创建和管理...

    基于事件的NIO多线程服务器

    【事件回调机制】在基于事件的NIO多线程服务器设计中,事件回调机制是核心组件之一。事件回调允许服务器在特定事件发生时调用预定义的处理函数,以执行相应的业务逻辑。这种方式使得代码更加模块化,易于扩展和维护...

Global site tag (gtag.js) - Google Analytics