java,php,asp.net,linux,javascript,mysql,mssql,oracle,编程

非阻塞式TCP时间服务器

转载请注明:http://www.pmjava.com/Article/ShowInfo.asp?ID=56595
package com.tz.simple.tcp;

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.SocketChannel; import java.util.Iterator;
import java.util.Set;

import com.tz.uitl.Common;

/**
* 非阻塞式TCP时间服务器

* 同并发接收服务器数据

*
*
@author LJZ
*
*/
public class TCPTimeClient extends Thread {

   
private int serverPort = 8485;

   
private SocketChannel client = null;

   
private Selector readSelector = null;

   
public TCPTimeClient(int p) throws IOException {
        serverPort
= p;
        readSelector
= Selector.open();
        client
= SocketChannel.open();
        client.connect(
new InetSocketAddress("192.168.100.38", serverPort));

        client.configureBlocking(
false);
        client.register(readSelector, SelectionKey.OP_READ);
        System.out.println(
"客户端 [" + client.socket().getLocalSocketAddress() + "] 启动, 连接服务器 ["
               
+ client.socket().getRemoteSocketAddress() + "]");
    }

   
public void run() {
       
while (true) {
           
try {
               
int keysReady = readSelector.select(100);

               
if (keysReady > 0) {
                    Set readyKeys
= readSelector.selectedKeys();
                   
for (Iterator i = readyKeys.iterator(); i.hasNext();) {
                        i.next();
                        i.remove();

                       
int nbytes = -1;
                        ByteBuffer byteBuffer
= ByteBuffer.allocate(1024);

                        nbytes
= client.read(byteBuffer);
                       
if (nbytes > 0) {
                            byteBuffer.flip();
                            System.out.println(
"收到服务器传来数据 "
                                   
+ Common.decode(byteBuffer));
                        }
                    }
                }
               
                client.write(ByteBuffer.wrap(
"abcd".getBytes()));

            }
catch (Exception e) {
                e.printStackTrace();
            }
finally {

            }
        }
    }

   
/**
     *
@param args
    
*/
   
public static void main(String[] args) {
       
try {
           
new TCPTimeClient(8485).start();
        }
catch (Exception e) {
            e.printStackTrace();
        }
    }

}

posted on 2009-06-10 21:35 rrong_m 阅读(148) 评论(0)  编辑  收藏

<2024年5月>
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678

导航

统计

常用链接

随笔档案

文章分类

文章档案

java编程

搜索

积分与排名

最新评论

阅读排行榜

评论排行榜