JAVA網絡編程 UDP 初學者進


java網絡編程 初學者進

對於網絡編程,首先你要了解網絡基礎知識,我先介紹幾個,就不詳細介紹了

通信協議:計算機網絡中實現通信必須有一些約定,即通信協議。對速率、傳輸代碼、代碼結構、傳輸控制步驟、出錯控制等制定標准。
TCP協議:提供可靠的數據傳輸服務的規則。
IP協議進行IP數據包的分割和組裝。
IP地址:為實現網絡中不同的計算機之間的通信,在網絡中的每台機器都必須有一個與眾不同的標識,這就是IP地址(IP Address)。
端口:一個16位的整數,用於表示數據交給哪個通信程序處理。

 OSI模型
 →→→→→→
↓應  用  層    ↓
 →→→→→→
↓表  示  層    ↓
 →→→→→→
↓會  話  層    ↓
 →→→→→→
↓傳  輸  層    ↓→→→→→TCP
 →→→→→→
↓網  絡  層    ↓→→→→→IP
 →→→→→→
↓數據鏈路層 ↓
 →→→→→→
↓物  理  層    ↓
 →→→→→→
JDK中為開發網絡應用程序提供了java.net包,該包下的類和接口幾乎都是為網絡編程服務的。


InetAddress:用於描述IP地址的對象
有2個靜態變方法獲取InetAddress實例
getByName(String host):根據主機獲取對應的InetAddress
getByAddress(byte[] addr):根據原始IP來獲取InetAddress

●先來說下UDP   比如聊天用的ICQ和OICQ就是使用的UDP協議。 
使用位於JDK中Java.net包下的DatagramSocket可以非常方便地控制用戶數據報文。
DatagramSocket類:創建接收和發送UDP的Socket實例。
DatagramSocket():創建實例。通常用於客戶端編程,它並沒有特定監聽的端口,僅僅使用一個臨時的。
DatagramSocket(int port):創建實例,並固定監聽Port端口的報文。
receive(DatagramPacket d):接收數據報文到d中。receive方法產生一個“阻塞”。
send(DatagramPacket d):發送報文d到目的地。
close():關閉DatagramSocket。在應用程序退出的時候,通常會主動釋放資源,關閉Socket。

實例1,編寫程序演示使用UDP協議數據報的發送和接受。
發送端
建立udpsocket服務端點。該端點建立,系統會隨機分配一個端口。如果不想隨機配置,可以手動指定。 DatagramSocket ds = new

DatagramSocket(9002);
將數據進行packet包的封裝,必須要指定目的地地址和端口。 byte[] buf = "wo shi shu ju".getBytes(); DatagramPacket dp =new

DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.254"),9001);
通過socket服務的send方法將該包發出。 ds.send(dp);
將socket服務關閉。主要是關閉資源。 ds.close();

代碼
package com.csdn.net;

import java.io.*;
import java.net.*;

public class SendDemo {

 /**
  * @param args
  */
 public static void main(String[] args) {
  DatagramSocket ds=null;
  try {
   ds=new DatagramSocket();
   BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
   String line=null;
   while((line=br.readLine())!=null){
    byte[] buf=line.getBytes();
    DatagramPacket dp=new DatagramPacket(buf,buf.length,InetAddress.getByName

("192.168.49.66"),9009);
    ds.send(dp);
    
   }
  } catch (Exception e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }finally{
   ds.close();
  }

 }

}
接收端
建立udp的socket服務。要監聽一個端口。 DatagramSocket ds = new DatagramSocket(9001);
定義一個緩沖區,將該緩沖區封裝到packet包中。 byte[] buf = new byte[1024]; DatagramPacket dp = new DatagramPacket

(buf,buf.length);
通過socket的receive方法將數據存入數據包中。 ds.receive(dp);
通過數據包dp的方法getData()、getAddress()、getPort()等方法獲取包中的指定信息。
關閉socket。 ds.close();

代碼
package com.hbsi.net;

import java.net.DatagramPacket;
import java.net.DatagramSocket;


//接收端
public class ReceiveDemo {

 /**
  * @param args
  */
 public static void main(String[] args) throws Exception {
  //1.建立udpsocket
  DatagramSocket ds=new DatagramSocket(9009);
  
  //2.建立一個數據包來接收數據
  byte[] buf=new byte[1024];
  
  DatagramPacket dp=new DatagramPacket(buf,buf.length);
  
  //3.接收
  ds.receive(dp);
  
  //4.通過數據包對象的方法獲取數據
  String ip=dp.getAddress().getHostAddress();//get  Ip
  String data=new String(dp.getData(),0,dp.getLength());//獲取收到的內容
  int port=dp.getPort();//get端口
  System.out.println(ip+":"+data+":"+port);
  
  //5關閉
  ds.close();
  

 }

 

 

 


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
  © 2014-2022 ITdaan.com 联系我们: