zoukankan      html  css  js  c++  java
  • 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<SelectionKey> 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 = "<request type='sampleTest' sender='LabManageSystem'> <sampleTest> <testCode>2</testCode><bulkType>无烟煤03</bulkType><sampleType>3mm无烟煤</sampleType><testType>脱水化验</testType><testResult>化验结果</testResult><testTime> 2018-9-8 20:00:00 </testTime><testStaff>化验人员</testStaff><testStation>化验工位#05</testStation><testDesc>化验正常</testDesc><testStatus>化验完毕</testStatus><checkTime> 2018-9-8 21:00:00 </checkTime><checkStaff>检查人员</checkStaff><checkResult>通过</checkResult><sampleCode>1</sampleCode><testType>脱水化验</testType></sampleTest></request>";
    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();
    }
    }
    }
  • 相关阅读:
    Django模型-admin后台管理数据
    Django入门-登录(写死用户名、密码)
    Django-admin后台验证登录
    全面了解POI操作Microsoft Office(Word、Excel、PowerPoint)
    poi操作word 2007 常用方法总结
    submit text3常用快捷键
    c3p0配置详解
    c3p0参数解释
    log4j.properties 的使用详解
    TortoiseSVN文件夹及文件图标不显示解决方法(兼容Window xp、window7)
  • 原文地址:https://www.cnblogs.com/ffaiss/p/9836966.html
Copyright © 2011-2022 走看看