当前位置: 首页 > 工具软件 > jSocket > 使用案例 >

jsocket(1)

陆子默
2023-12-01
public class MySocket extends TcpSocket
{
    public MySocket(SocketHandler h)
    {
        super(h);
        SetLineProtocol();
    }

    public void OnAccept()
    {
        Send("Welcome\r\n");
    }

    public void OnLine(String line)
    {
        Send("You said: " + line + "\r\n");
        if (line.equals("quit"))
        {
            Send("Goodbye!\r\n");
            SetCloseAndDelete();
        }
    }

    public static void main(String[] args)
    {
        //初始化日志,为传入SocketHandler网络处理类作准备
        StdLog log = new StdoutLog();
        
        
        //做的事情就是将log传入到SocketHandler类中,在这个类中要使用StdLog进行日志的记录,还有会初始化一个Selector和存放Socket的Vector。Selector类与SocketHandler关联,因为SocketHandler的主要任务就是处理Selector不同感兴趣的事件,然后由TcpSocket进行详细的处理
        SocketHandler h = new SocketHandler(log);
        
        //首先它会先去初始化MySocket类,MySocket类继承的是TcpSocket类,那么它会去调用TcpSocket的构造方法,TcpSocket的构造方法做的一些事情:
        1,首先TcpSocket的构造方法会先去调用它的父类Socket的构造方法,然后它会先把SocketHandler对象h传递给TcpSocket的父类Socket,父类拥有SocketHandler对象,
        2,因为TcpSocket是用来处理数据的类,所以它在初始化的过程中会申请缓冲区等任务。
        
        接着就是调用ListenSocket类的构造方法,ListenSocket类主要是用来连接和取消的任务的,那么TcpSocket的构造方法做了什么事:
        1,首先会去调用ListenSocket父类Socket构造方法,把SocketHandler对象h传递给ListenSocket的父类Socket
        2,把MySocket对象传入到ListenSocket类中
        ListenSocket l = new ListenSocket(h, new MySocket(h));
        
        //建立连接,建立连接的方法与普通的建立一样
        但是Bind方法做了一步 attach(ssc);//将ServerSocketChannel设置到ListenSocket里面,方便下去取到ServerSocketChannel对象
        if (l.Bind(8000) == 0) // listen on port 8000 监听端口号
        {
            h.Add(l);//如果有新用户连接上来,则进行Add处理
        }
        boolean quit = false;
        while (!quit) // forever
        {
            h.Select(1, 0);//对不同感兴趣的SelectionKey进行处理
        }
    }
}
下面看看源码。。。

 类似资料: