首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java相关 >

SocketChannel 的信息发送和读取有关问题

2012-12-24 
SocketChannel 的信息发送和读取问题代码如下。 问题是我给服务器端发送了内容,但是在服务器没有接受到内容

SocketChannel 的信息发送和读取问题
代码如下。 问题是我给服务器端发送了内容,但是在服务器没有接受到内容,长度为-1,getInt获得的结果是0 ,求帮助 
服务器的代码:
public void SocketChannelServer() throws Exception {
  Selector seletor = Selector.open();
  ServerSocketChannel serverchannel = ServerSocketChannel.open();
  SocketChannel socketChannel = SocketChannel.open();
  serverchannel.configureBlocking(false);
  serverchannel.bind(new InetSocketAddress("127.0.0.1", 6000));
  serverchannel.register(seletor, SelectionKey.OP_ACCEPT);
  while (seletor.select() > 0) {// 启动服务,阻塞
    Set<SelectionKey> keys = seletor.selectedKeys();
    Iterator<SelectionKey> itera = keys.iterator();
    
    while (itera.hasNext()) {
     SelectionKey key = itera.next();
     if (key.isAcceptable()) {
      System.out.println("成功");
      socketChannel = serverchannel.accept();
      socketChannel.configureBlocking(false);
      socketChannel.register(seletor, SelectionKey.OP_READ
        | SelectionKey.OP_WRITE);

 
     } else if (!key.isValid()) {
      itera.remove();
      continue;
     } else if (key.isConnectable()) {
      System.out.println("连接成功");
      serverchannel.register(seletor, SelectionKey.OP_READ
        | SelectionKey.OP_WRITE);
     } else if (key.isReadable()) {
      SocketChannel socketChannelNew = (SocketChannel)key.channel();
      ByteBuffer bytebuffer = ByteBuffer.allocateDirect(100);
      int j=socketChannelNew.read(bytebuffer);
      System.out.println("长度" + j);
      int y = bytebuffer.getInt();
      System.out.println("读取" + y);
      socketChannelNew.close();
     } 
      else if (key.isWritable()) {
     } 
     itera.remove();
    }
  }

 
客户端的代码:
int i=0;
  SocketChannel channel=SocketChannel.open();
  channel.configureBlocking(false);
  InetSocketAddress remote=new InetSocketAddress("127.0.0.1",6000);
  channel.connect(remote);
  try {
   while (!channel.finishConnect()) {
    Thread.sleep(1000);
    i++;
    System.out.println("连接中。。。");
    if (i > 5) {
     break;
    }
    ;
   }
  } catch (Exception e) {
   System.out.println("连接失败");
   return;


  }
  ByteBuffer bufferClient=ByteBuffer.allocateDirect(100);
  bufferClient.putInt(0x12345678);
  bufferClient.flip();
  channel.write(bufferClient);  
Thread.sleep(1000);
  bufferClient.clear();
[最优解释]
我的结果是长度4, 读取值为0。
你调试一下吧
[其他解释]
怎么没人回复,求解答啊
[其他解释]
是同一段代码?
[其他解释]

引用:
是同一段代码?

就是拿你好代码去试的。 jdk1.6 + eclipse3.7
[其他解释]
问题已经解决了,好像是客户端部分在服务器端读数据之前就已经关闭了。

热点排行