代码之家  ›  专栏  ›  技术社区  ›  none

通过UDP传输字节缓冲区

  •  3
  • none  · 技术社区  · 18 年前

    您能提供一个通过UDP数据报在两个java类之间传输字节缓冲区的示例吗?

    2 回复  |  直到 14 年前
        1
  •  4
  •   Dave Cheney    18 年前

    怎么样?

    import java.io.IOException;
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.net.InetSocketAddress;
    
    
    public class Server {
    
        public static void main(String[] args) throws IOException {
            DatagramSocket socket = new DatagramSocket(new InetSocketAddress(5000));
            byte[] message = new byte[512];
            DatagramPacket packet = new DatagramPacket(message, message.length);
            socket.receive(packet);
            System.out.println(new String(packet.getData(), packet.getOffset(), packet.getLength()));
        }
    }
    
    import java.io.IOException;
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.net.InetSocketAddress;
    
    
    public class Client {
    
        public static void main(String[] args) throws IOException {
            DatagramSocket socket = new DatagramSocket();
            socket.connect(new InetSocketAddress(5000));
            byte[] message = "Oh Hai!".getBytes();
            DatagramPacket packet = new DatagramPacket(message, message.length);
            socket.send(packet);
        }
    }
    
        2
  •  0
  •   Dave Cheney    18 年前

    @没有

    DatagramSocket类确实需要改进,DatagramChannel对客户端来说稍微好一些,但对服务器编程来说却令人困惑。例如:

    import java.io.IOException;
    import java.net.InetSocketAddress;
    import java.nio.ByteBuffer;
    import java.nio.channels.DatagramChannel;
    
    
    public class Client {
    
        public static void main(String[] args) throws IOException {
            DatagramChannel channel = DatagramChannel.open();
            ByteBuffer buffer = ByteBuffer.wrap("Oh Hai!".getBytes());
            channel.send(buffer, new InetSocketAddress("localhost", 5000));
        }
    }
    

    引起 JSR-203 我说