小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

仿QQ聊天簡單的UDP傳輸實(shí)例

 CevenCheng 2011-03-11

       來西安八天了,一直忙做一個(gè)B/S系統(tǒng) ,通過網(wǎng)站控制視頻距陣來切換攝像頭和紅外報(bào)警.最后搞定了,把一些思路和大家分享下.


       完成此功能的技術(shù)要點(diǎn)就是UDP協(xié)議傳輸, UDP傳輸?shù)牡么蟮囊粋€(gè)特點(diǎn)就是個(gè)無連接協(xié)議,傳輸數(shù)據(jù)之前源端和終端不建立連接,當(dāng)UDP它想傳送時(shí)就簡單地去抓取來自應(yīng)用程序的數(shù)據(jù),并盡可能快地把它扔到網(wǎng)絡(luò)上。在發(fā)送端,UDP傳送數(shù)據(jù)的速度僅僅是受應(yīng)用程序生成數(shù)據(jù)的速度、計(jì)算機(jī)的能力和傳輸帶寬的限制;在接收端,UDP把每個(gè)消息段放在隊(duì)列中,應(yīng)用程序每次從隊(duì)列中讀一個(gè)消息段。 


       看到這大家想想QQ聊天就可以更好的理解,QQ聊天就是用UDP傳輸?shù)? 以下通過java代碼來簡單的實(shí)現(xiàn)一個(gè)簡單的通訊
 
  首先創(chuàng)建一個(gè)客戶端

 public class UDPClient {
 private static final int PORT = 5000; //注意這個(gè),這個(gè)是服務(wù)的端口

 private DatagramSocket dataSocket;
 private DatagramPacket dataPacket;
 private byte sendDataByte[];
 private String sendStr;

 public UDPClient() {
  Init();
 }

 public void Init() {
  try {
   // 指定端口號,避免與其他應(yīng)用程序發(fā)生沖突 
   dataSocket = new DatagramSocket(PORT+1);  //因?yàn)槭窃诒緳C(jī)測試,所以端口會(huì)沖突,我就加了一個(gè)1。如果有單獨(dú)的服務(wù)器 即去掉
     sendDataByte = new byte[1024];
   sendStr = "UDP方式發(fā)送數(shù)據(jù)";  //這里是重點(diǎn)就是轉(zhuǎn)輸數(shù)據(jù)。一般要控制硬件,就要傳一點(diǎn)指令過去 如:FFAADDFF
   sendDataByte = sendStr.getBytes(); // 這里也是重點(diǎn),就是把字符轉(zhuǎn)換成byte 結(jié)合項(xiàng)目需要,自己寫方法轉(zhuǎn)換
   dataPacket = new DatagramPacket(sendDataByte, sendDataByte.length,
     InetAddress.getByName("localhost"), PORT);
   dataSocket.send(dataPacket);
  } catch (SocketException se) {
   se.printStackTrace();
  } catch (IOException ie) {
   ie.printStackTrace();
  }
 }

 public static void main(String args[]) {
  new UDPClient();
 }
}
  


然后創(chuàng)建服務(wù)器

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

public class UDPServer {
  private static final int PORT = 5000;  
  private DatagramSocket dataSocket;   
  
  private DatagramPacket dataPacket;   
  private byte receiveByte[];   
  private String receiveStr;
 public UDPServer() throws IOException {
  Init();
 }

 public void Init() throws IOException {
  dataSocket = new DatagramSocket(PORT);
  receiveByte = new byte[1024];       
  dataPacket = new DatagramPacket(receiveByte, receiveByte.length);        
  receiveStr = "";          
  int i = 0;
  while (i == 0) {  // 無數(shù)據(jù),則循環(huán)  
   dataSocket.receive(dataPacket);    
  i = dataPacket.getLength();               
  // 接收數(shù)據(jù)
  if (i > 0) {         
   // 指定接收到數(shù)據(jù)的長度,可使接收數(shù)據(jù)正常顯示,開始時(shí)很容易忽略這一點(diǎn)
   receiveStr = new String(receiveByte, 0, dataPacket.getLength());        
   System.out.println("客戶傳過來的數(shù)字"+receiveStr);         
   i = 0;// 循環(huán)接收
   }            
  }      
 }


 public static void main(String args[]) throws IOException {
  new UDPServer();
 }
}


測試,首先啟動(dòng)服務(wù)程序,然后運(yùn)行客戶端就可以測試效果了

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多