nio服务器图片显示,NIO服务器与客户端

这里客户端没有采用NIO形式

服务器:

package com.util.Server.NIO;

import javax.print.DocFlavor;

import java.io.IOException;

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.Iterator;

public class ServerConnect

{

private static final int BUF_SIZE=1024;

private static final int PORT = 888;

private static final int TIMEOUT = 3000;

public static void main(String[] args)

{

selector();

}

public static void handleAccept(SelectionKey key) throws IOException {

ServerSocketChannel ssChannel = (ServerSocketChannel)key.channel();

SocketChannel sc = ssChannel.accept();

sc.configureBlocking(false);

sc.register(key.selector(), SelectionKey.OP_READ,ByteBuffer.allocateDirect(BUF_SIZE));

}

public static void handleRead(SelectionKey key) throws IOException{

SocketChannel sc = (SocketChannel)key.channel();

ByteBuffer buf = (ByteBuffer)key.attachment();

long bytesRead = sc.read(buf);

while(bytesRead>0){

buf.flip();

byte[] bb= new byte[BUF_SIZE];

int i=0;

while(buf.hasRemaining()){

// System.out.println("*"+(byte)(buf).get()+"*");

bb[i] = (byte)(buf).get();

i++;

}

System.out.println(new String(bb,"UTF-8"));

buf.clear();

bytesRead = sc.read(buf);

}

buf.clear();

buf.put("lalalalalala".getBytes());

buf.flip();

sc.write(buf);

if(bytesRead == -1){

sc.close();

}

}

public static void handleWrite(SelectionKey key) throws IOException{

ByteBuffer buf = (ByteBuffer)key.attachment();

buf.flip();

SocketChannel sc = (SocketChannel) key.channel();

while(buf.hasRemaining()){

sc.write(buf);

}

buf.compact();

}

public static void selector() {

Selector selector = null;

ServerSocketChannel ssc = null;

try{

selector = Selector.open();

ssc= ServerSocketChannel.open();

ssc.socket().bind(new InetSocketAddress(PORT));

ssc.configureBlocking(false);

ssc.register(selector, SelectionKey.OP_ACCEPT);

while(true){

if(selector.select(TIMEOUT) == 0){

System.out.println("==");

continue;

}

Iterator iter = selector.selectedKeys().iterator();

while(iter.hasNext()){

SelectionKey key = iter.next();

if(key.isAcceptable()){

handleAccept(key);

}

if(key.isReadable()){

try {

handleRead(key);

}catch (IOException e){

key.cancel();

}

}

if(key.isWritable()){

handleWrite(key);

}

if(key.isConnectable()){

System.out.println("isConnectable = true");

}

iter.remove();

}

}

}catch(IOException e){

e.printStackTrace();

}

}

}

客户端:

package com.util.Server.Test;

import ch.qos.logback.core.OutputStreamAppender;

import javax.net.ssl.SSLSocketFactory;

import java.io.InputStream;

import java.io.OutputStream;

import java.io.PrintWriter;

import java.net.Socket;

public class TestSocketClient {

public static void main(String[] args){

try {

Socket socket = new Socket("localhost", 888);

//Socket socket =SSLSocketFactory.getDefault().createSocket("localhost",888);

PrintWriter pw;

pw = new PrintWriter(socket.getOutputStream(), true);

String message = "sadddddddddddddddddddddddddd" +

"asddddddddddddddddddddd

" +

"werrrrrrrrrrrrrrrrr

" +

"werrrrrr

rrrr" +

"xcvvvvvvvvvvvvv" +

"hgjjjjjjjjjj" +

"jhkjjjjjjjjjjjjjjj" +

"assssssssssssss";

System.out.println(message.getBytes().length);

message = "2无烟煤033mm无烟煤脱水化验化验结果 2018-9-8 20:00:00 化验人员化验工位#05化验正常化验完毕 2018-9-8 21:00:00 检查人员通过1脱水化验";

System.out.println(message.getBytes().length);

pw.println(message);

pw.flush();

byte[] buffer = new byte[1024];

while ((socket.getInputStream().read(buffer)) != -1) {

//sb.append(new String(buffer,"UTF-8"));

// ab.add(buffer);

// buffer = new byte[BYTELENGH];

System.out.println(new String(buffer, "UTF-8"));

}

//pw.println("你猜猜");

}catch (Exception e){

e.printStackTrace();

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用 Java NIO 读取远程服务器文件,你可以通过建立一个 Socket 连接到目标服务器,并使用 NIO 的 Channel 进行数据读取。 具体实现步骤如下: 1. 在客户中,使用 Socket 连接到目标服务器,并获取到一个 SocketChannel 对象。 2. 在客户中,使用 Selector 对象监听 SocketChannel,等待读取事件的发生。 3. 在读取事件发生时,使用 SocketChannel 的 read() 方法读取数据。 4. 在客户中,接收读取到的数据,并进行处理,如解析文件内容等。 下面是一个使用 Java NIO 读取远程服务器文件的示例代码: ``` // 客户代码 String serverIP = "目标服务器IP地址"; int serverPort = 目标服务器口号; String filePath = "目标服务器文件路径"; SocketChannel socketChannel = SocketChannel.open(); socketChannel.connect(new InetSocketAddress(serverIP, serverPort)); Selector selector = Selector.open(); socketChannel.register(selector, SelectionKey.OP_READ); // 发送请求 ByteBuffer buffer = ByteBuffer.wrap(filePath.getBytes()); socketChannel.write(buffer); while (true) { selector.select(); Set<SelectionKey> selectionKeys = selector.selectedKeys(); for (SelectionKey key : selectionKeys) { if (key.isReadable()) { SocketChannel channel = (SocketChannel) key.channel(); // 接收数据 ByteBuffer receiveBuffer = ByteBuffer.allocate(1024); channel.read(receiveBuffer); receiveBuffer.flip(); // 处理数据 String fileContent = new String(receiveBuffer.array(), 0, receiveBuffer.limit()); // 关闭连接 channel.close(); selector.close(); // 处理文件内容 // ... return; } } } ``` 在上面的示例代码中,客户通过 Socket 连接到目标服务器,并获取到一个 SocketChannel 对象。然后,客户通过 Selector 对象监听 SocketChannel,等待读取事件的发生。当读取事件发生时,客户使用 SocketChannel 的 read() 方法读取数据,并接收数据后进行处理。 需要注意的是,在实际应用中,需要根据具体情况进行调整,如对读取事件的发生进行判断和处理,对读取的数据进行解析等。同时,还需要进行异常处理,以确保程序的稳定运行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值