• Java study 1:The note of studying Socket which based UDP


    1. UDP concept:

        UDP 是User Datagram Protocol的简称, 中文名是用户数据报协议,是OSI(Open System Interconnection,开放式系统互联) 参考模型中一种无连接传输层协议,提供面向事务的简单不可靠信息传送服务,IETF RFC 768是UDP的正式规范。UDP在IP报文的协议号是17。(from baike)

    2. UDP program:

        因爲UDP協議是一種無連接的協議,所以

          (1)、每次發送數據並不需要綁定,只需要使用DatagramPacket()構造好對應的數據包就可以了;

          (2)、沒有像TCP一樣的ServerSocket 與Socket之分,雙方都用DatagramPacket初始化;

             (3)、發送接收用send(數據包),receive(數據包)

      下面上代碼:

      *UDP並無Server與Client之分,但是代碼一個發送一個接受就起了這名字(這並不重要~逃)

      *發送成功之後雙方就建立了一個鏈接(虛),可以互發數據

     1 import java.io.IOException;
     2 import java.net.DatagramPacket;
     3 import java.net.DatagramSocket;
     4 import java.net.SocketException;
     5 
     6 public class UdpServer {
     7     public static void main(String[] args) {
     8         DatagramSocket dgs = null;
     9         try {
    10             dgs=new DatagramSocket(8888);
    11             //receive
    12             byte[] buf=new byte[256];
    13             int length=256;
    14             DatagramPacket dgp=new DatagramPacket(buf, length);
    15             dgs.receive(dgp);
    16             System.out.println("receive from client:"+new String(buf, 0, length));
    17             
    18             //send
    19             String str="yeah i have receivered~";
    20             System.out.println(dgp.getAddress());//use last time's packet to get the address 
    21             System.out.println(dgp.getPort());
    22             DatagramPacket dgp_send=new DatagramPacket(str.getBytes(),str.length(), dgp.getAddress(), dgp.getPort());
    23             dgs.send(dgp_send);
    24             dgs.close();
    25         } catch (SocketException e) {
    26             e.printStackTrace();
    27         } catch (IOException e) {
    28             e.printStackTrace();
    29         }finally{
    30             dgs.close();
    31         }
    32     }
    33 }
    UdpServer
     1 import java.net.DatagramPacket;
     2 import java.net.DatagramSocket;
     3 import java.net.InetAddress;
     4 
     5 public class UdpClient {
     6     public static void main(String[] args) {
     7         DatagramSocket dgs = null;
     8         try {
     9             dgs=new DatagramSocket();
    10             //send->server
    11             String str="so dirty haha~";
    12             DatagramPacket dgp_send=new DatagramPacket(str.getBytes(),0,str.length(),InetAddress.getByName("localhost"),8888);
    13             dgs.send(dgp_send);
    14             //receive from server
    15             byte[] buf=new byte[256];
    16             DatagramPacket dgp2_receive=new DatagramPacket(buf, 256);
    17             dgs.receive(dgp2_receive);
    18             System.out.println("receive from server:"+new String(buf,0,256));
    19             dgs.close();
    20             
    21             
    22         } catch (Exception e) {
    23             System.out.println("error:"+e);
    24         }
    25     }
    26 }
    UdpClient


    p.s.I:Server 的 send 部分使用之前用來接收數據的包dgp來取得發送者的address以及port,然後再用新的DatagramPacket來發送數據

    p.s.II:DatagramPacket的搆造函數中,byte[]用來放數據,length用來放長度,程序簡單所以數字亂寫的(ha

      

  • 相关阅读:
    [笔记] Delphi 10.2.1 Tokyo 安装使用笔记
    [控件] Firemonkey 跨平台 Toast
    [iOS] Edit / Memo 原生控件才提供拼字检查
    [外观] Firemonkey Windows Hint 气球样式
    SQL实现value为1,2,3转换为值
    关于python的一些坑
    Python JSON
    python 字典拷贝
    python 日期、时间、字符串相互转换
    python获取cookie的方法
  • 原文地址:https://www.cnblogs.com/qixi233/p/4418008.html
Copyright © 2020-2023  润新知