udpconnection.java

来自「封装了SQL、Socket、WAP、MIME等功能的通用组件」· Java 代码 · 共 80 行

JAVA
80
字号
/**
 * <p>Title: </p>
 * <p>Description: </p>
 * <p>Copyright: Copyright (c) 2004</p>
 * <p>Company: www.lazybug.com</p>
 * @author 刘学
 * @version 1.0
 */
package org.lazybug.net;

import java.io.*;
import java.net.*;
import java.util.*;
import org.lazybug.util.*;

public class UDPConnection extends Connection
{
    private int bufferLength = 0;
    public int timeout = 0;
    public DatagramSocket socket;

    public UDPConnection(int nPageNum, int nPageSize) throws SocketException
    {
        super(nPageNum, nPageSize);
        bufferLength = this.pageNum * this.pageSize;
        super.buffer = new byte[bufferLength];
        socket = new DatagramSocket();
    }

    public UDPConnection(int nPageNum, int nPageSize, int port) throws SocketException
    {
        super(nPageNum, nPageSize);
        bufferLength = this.pageNum * this.pageSize;
        super.buffer = new byte[bufferLength];
        this.port = port;
        socket = new DatagramSocket(port);
    }

    public int getMaxPageLength()
    {
        return this.pageSize;
    }

    public int getBufferLength()
    {
        return bufferLength;
    }
    /**
     * 接收数据
     * @return 接收数据是否成功
     */
    public int onReceiveFrom(Packet packet) throws IOException
    {
        DatagramPacket dp = new DatagramPacket(getBuffer(),
                                               packet.buffer_offset,
                                               pageSize);
        if( timeout > 0 ) socket.setSoTimeout(timeout);
        socket.receive( dp );
        Tools.copyByteArray(dp.getAddress().getAddress(), packet.ip);
        packet.port = dp.getPort();//设置端口
        return dp.getLength();
    }

    public int onSendTo(Packet packet) throws IOException
    {
        DatagramPacket dp = new DatagramPacket( buffer,
                                                packet.buffer_offset,
                                                packet.getLength(),
                                                InetAddress.getByAddress(packet.ip),
                                                packet.port);
        socket.send(dp);
        return dp.getLength();
    }

    public void close()
    {
        this.socket.close();
    }
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?