解决方案 »
- spring mvc 关于在controller中获取request
- 使用ffmpeg把wmv转换flv格式的参数设置问题
- 页面间传递bean
- 惊天动地跪求spring+hibernater事务异常问题
- 在线等。。。请教Java SOCKET 客户端的问题
- 求助大虾
- 如何从数据库中读出文件并作为附件用JAVA MAIL发送出去?
- 一个ibatis的问题,找不到SqlMapConfig.xml文件
- delphi客户端和java服务器端的通信问题
- 为何我使用java画图调用repaint后未重新绘图,而是在原基础上绘图
- 求救!!Io 异常: The Network Adapter could not establish the connection
- 求张龙(风中叶)老师的“版本控制系统—SubVersion”视频
当需要写数据时才这样注册一个可写事件。socketChannel.register(selector, SelectionKey.OP_WRITE, buffer);
数据写完后,记得将写事件取消掉。
key.interestOps(SelectionKey.OP_READ);
就是我客户端主线程main注册了读事件 socketChannel.register(selector, SelectionKey.OP_READ);
子线程有写需求时注册写事件socketChannel.register(selector, SelectionKey.OP_WRITE);
socketChannel 是主类的成员变量。
现在是能接收到服务端的信息,客户端却发发不出去了。
key.interestOps(SelectionKey.OP_READ);
key.interestOps(SelectionKey.OP_READ);写操作完成后这句话已经加上了
定义一个同步变量。final Object synchronizedObj = new Object();
运行时注册事件需要在同步块中完成。
synchronized (synchronizedObj) {
selector.wakeup();
channel.register(selector, SelectionKey.OP_WRITE, manager);
}
同时在事件的循环中也需要进行同步synchronized (synchronizedObj) {}
一个空的同步块就行了。
//receive(key); 你要不读取的话, 会一直有读取事件。 死循环。
}ByteBuffer buffer = ByteBuffer.allocate(1024); 这据代码, 在循环里面, 是会要你命的哦。