zoukankan      html  css  js  c++  java
  • Java中的网络编程-3

      用户数据协议(UDP)是网络信息传输的另外一种形式, 基于UDP的通信不同于基于TCP的通信, 基于UDP的信息传递更快, 但是不提供可靠的保证. 使用UDP传输数据时, 用户无法知道数据能否正确地到达主机, 也不能确定到达目的地的顺序是否和发送的顺序相同. 虽然, UDP是一种不可靠的协议, 但如果需要较快地传输信息, 并能够容忍较小的错误, 可以考虑使用UDP.

      基于UDP通信的基本模式如下:

        1. 将数据打包(称为数据包), 然后将数据包发往目的地.

        2. 接收别人发来的数据包, 然后查看数据包.

      UDP程序步骤:

      发送数据包:

        1. 使用 DatagramSocket()创建一个数据包套接字.

        2. 使用 DatagramPacket(byte[] buf, int offset, int length, InetAddress address, int port)创建要发送的数据包.

        3. 使用 DatagramSocket类的 send()方法发送数据包.

      接收数据包:

        1. 使用 DatagramSocket(int port)创建数据包套接字, 绑定到指定端口.

        2. 使用 DatagramPacket(byte[] buf, int length)创建字节数组来接收数据包.

        3. 使用 DatagramPacket类的 receive()方法接收UDP包.

    Demo_1:

    Server 端:

    import java.io.IOException;
    import java.net.*;
    public class TestUDPServer {
    	public static void main(String[] args) {
    		byte buf[] = new byte[1024];
    		try {
    			DatagramSocket ds = new DatagramSocket(5678);
    			DatagramPacket dp = new DatagramPacket(buf, buf.length);
    			while(true){
    				try {
    					ds.receive(dp);
    					System.out.println(new String(buf,0,dp.getLength()));
    				} catch (IOException e) {
    					e.printStackTrace();
    				}
    			}
    		} catch (SocketException e) {
    			e.printStackTrace();
    		}
    	}
    }
    

     Client 端:

    import java.io.IOException;
    import java.net.*;
    public class TestUDPClient {
    	public static void main(String[] args) {
    		byte[] buf = (new String("hello java")).getBytes();
    		DatagramPacket dp = new DatagramPacket(buf, buf.length, new InetSocketAddress("192.168.56.1", 5678));
    		DatagramSocket ds;
    		try {
    			ds = new DatagramSocket(9999);
    			try {
    				ds.send(dp);
    			} catch (IOException e) {
    				e.printStackTrace();
    			}
    			ds.close();
    		} catch (SocketException e) {
    			e.printStackTrace();
    		}
    	}
    }
    

     运行结果:

    Demo_2:

    Server 端:

    import java.io.*;
    import java.net.*;
    public class UDPServer {
    	public static void main(String[] args) {
    		byte[] buf = new byte[1028];
    		try {
    			DatagramSocket ds = new DatagramSocket(5679);
    			DatagramPacket dp = new DatagramPacket(buf, buf.length);
    			while(true){
    				try {
    					ds.receive(dp);
    					ByteArrayInputStream bais = new ByteArrayInputStream(buf);
    					DataInputStream dis = new DataInputStream(bais);
    					System.out.println(dis.readLong());
    				} catch (IOException e) {
    					e.printStackTrace();
    				}
    			}
    		} catch (SocketException e) {
    			e.printStackTrace();
    		}
    	}
    }
    

     Client 端:

    import java.io.*;
    import java.net.*;
    public class UDPClient {
    	public static void main(String[] args) {
    		long n = 1089L;
    		ByteArrayOutputStream baos = new ByteArrayOutputStream();
    		DataOutputStream dos = new DataOutputStream(baos);
    		try {
    			dos.writeLong(n);
    			byte[] buf = baos.toByteArray();
    			DatagramPacket dp = new DatagramPacket(buf, buf.length, new InetSocketAddress("192.168.56.1", 5679));
    			DatagramSocket ds = new DatagramSocket(9987);
    			ds.send(dp);
    			ds.close();
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    	}
    }
    

     运行结果:

  • 相关阅读:
    顺序栈用C语言实现
    对队列的操作和算法
    对链表的操作与算法
    对动态数组的操作与算法
    链表
    冒泡排序
    指针之动态分配内存
    字符串匹配KMP算法
    DS二叉树--层次遍历
    DS图--最小生成树
  • 原文地址:https://www.cnblogs.com/bosongokay/p/7050571.html
Copyright © 2011-2022 走看看