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
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值