java如何实现把结果返回到telnet socket就行了,outputstream write 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 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; }} 我现在是实现了,java代码往通道中写入数据,然后用telnet去连,但是telnet并没有内容显示之前写入通道的内容,我是不是需要通过java代码去实现一个客户端,然后读取之前我写入通道的内容,tenlent自身就没有这个功能? 关于struts2 action加载的问题 请问我这条hql的update语句那个地方出问题了????? jsp 页面 参数不足 期待数是 1 怎样将jsp前台生成静态页 日期格式在weblogic下发布的格式问题 Math函数的问题 eclipse3.2 编辑器窗格中 怎样显示出source,preview 按钮? 登陆验证码部署问题 求教在如何服务器端建立文件夹?救命啊! 从数据库中读出数据以xml文件保存的问题 MyEclipse自带tomcat异常,外部tomcat正常 微信回复消息中文编码格式
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;
}
}