socket就行了,outputstream write

解决方案 »

  1.   


    package server;import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.OutputStream;
    import java.net.InetSocketAddress;
    import java.nio.ByteBuffer;
    import java.nio.CharBuffer;
    import java.nio.channels.Channels;
    import java.nio.channels.SelectionKey;
    import java.nio.channels.Selector;
    import java.nio.channels.ServerSocketChannel;
    import java.nio.channels.SocketChannel;
    import java.nio.channels.WritableByteChannel;
    import java.nio.charset.Charset;
    import java.sql.SQLException;
    import java.util.Iterator;
    import java.util.Set;import javax.naming.NamingException;public class MyServerSocket {

    private static final Charset charset = Charset.forName("utf8"); 

    public static void main(String args[]) throws IOException, ClassNotFoundException, NamingException, SQLException {
    ServerSocketChannel serverChannel = ServerSocketChannel.open();
    serverChannel.socket().bind(new InetSocketAddress(9001));
    serverChannel.configureBlocking(false);
    Selector selector = Selector.open();
    serverChannel.register(selector, SelectionKey.OP_ACCEPT);

    while(true) {
    selector.select();
    Set readKey = selector.selectedKeys();
    Iterator iter = readKey.iterator();
    while(iter.hasNext()) {
    SelectionKey key = (SelectionKey) iter.next();
    iter.remove();
    if(key.isAcceptable()) {
    System.out.println("here is ok !!!");
    ServerSocketChannel server = (ServerSocketChannel) key.channel();
    SocketChannel socketChannel = serverChannel.accept();
    socketChannel.configureBlocking(false);
    socketChannel.register(selector, SelectionKey.OP_READ); //read
    //   socketChannel.register(selector, SelectionKey.OP_WRITE);
    } else if(key.isReadable()) {
    SocketChannel socketChannel = (SocketChannel) key.channel();
    //getInputStream
    InputStream input = socketChannel.socket().getInputStream();
    BufferedReader buff = new BufferedReader(new InputStreamReader(input));
    String str = "" , target = "";
    int totlen = 0 , l = 0;
    // System.out.println("here is ok too");
    while(true) {
    str = "";
    str = buff.readLine();
    System.out.println("here is ok too *");
    if(totlen == 0) {
    String len = str.substring(0,4);
    totlen  = getLength(len);
    l += str.length() -4; //判断是否要进行下一行的读取
    target += str.substring(4, str.length()); //目标字符串
    } else {
    l += str.length();
    target += str;
    }
    if(l < totlen) continue;
    else break;
    }
    // System.out.println("receive is ok");
    //从客户端传过来内容判断数据长度是下面括号内的参数
    // ByteBuffer bf = ByteBuffer.allocate(10000);
    // socketChannel.read(bf); //将通道内容写入缓冲区
    // bf.flip();
    // CharBuffer cb = charset.decode(bf);
    // bf.clear();
    // String tmp = cb.toString();
    // cb.clear();
    //Length
    // String target = tmp.substring(4);
    MySQLOperation.init();
    boolean flg = MySQLOperation.addData(target);

    OutputStream output = socketChannel.socket().getOutputStream();
    if(flg) {
    //Success
    // ByteBuffer bb = ByteBuffer.wrap("Success".getBytes());
    // bb.flip();
    output.write("Success".getBytes());
    output.flush();
    // output.write(bb);
    // bb.clear();

    } else {
    //Fail
    output.write("Fail".getBytes());
    output.flush();
    // ByteBuffer bb = ByteBuffer.wrap("Fail".getBytes());
    // bb.flip();
    // output.write(bb);
    // bb.clear();

    }
    }
    }
    }
    }

    static int getLength(String str) {
    int len = 0;
    for(int i = 0; i < str.length() ;i ++) {
    len = len * 10 + str.charAt(i)-'0';
    }
    return len;
    }
    }
      

  2.   

    我现在是实现了,java代码往通道中写入数据,然后用telnet去连,但是telnet并没有内容显示之前写入通道的内容,我是不是需要通过java代码去实现一个客户端,然后读取之前我写入通道的内容,tenlent自身就没有这个功能?