分享

仿QQ聊天简单的UDP传输实例

 CevenCheng 2011-03-11

       来西安八天了,一直忙做一个B/S系统 ,通过网站控制视频距阵来切换摄像头和红外报警.最后搞定了,把一些思路和大家分享下.


       完成此功能的技术要点就是UDP协议传输, UDP传输的得大的一个特点就是个无连接协议,传输数据之前源端和终端不建立连接,当UDP它想传送时就简单地去抓取来自应用程序的数据,并尽可能快地把它扔到网络上。在发送端,UDP传送数据的速度仅仅是受应用程序生成数据的速度、计算机的能力和传输带宽的限制;在接收端,UDP把每个消息段放在队列中,应用程序每次从队列中读一个消息段。 


       看到这大家想想QQ聊天就可以更好的理解,QQ聊天就是用UDP传输的. 以下通过java代码来简单的实现一个简单的通讯
 
  首先创建一个客户端

 public class UDPClient {
 private static final int PORT = 5000; //注意这个,这个是服务的端口

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

 public UDPClient() {
  Init();
 }

 public void Init() {
  try {
   // 指定端口号,避免与其他应用程序发生冲突 
   dataSocket = new DatagramSocket(PORT+1);  //因为是在本机测试,所以端口会冲突,我就加了一个1。如果有单独的服务器 即去掉
     sendDataByte = new byte[1024];
   sendStr = "UDP方式发送数据";  //这里是重点就是转输数据。一般要控制硬件,就要传一点指令过去 如:FFAADDFF
   sendDataByte = sendStr.getBytes(); // 这里也是重点,就是把字符转换成byte 结合项目需要,自己写方法转换
   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();
 }
}
  


然后创建服务器

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) {  // 无数据,则循环  
   dataSocket.receive(dataPacket);    
  i = dataPacket.getLength();               
  // 接收数据
  if (i > 0) {         
   // 指定接收到数据的长度,可使接收数据正常显示,开始时很容易忽略这一点
   receiveStr = new String(receiveByte, 0, dataPacket.getLength());        
   System.out.println("客户传过来的数字"+receiveStr);         
   i = 0;// 循环接收
   }            
  }      
 }


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


测试,首先启动服务程序,然后运行客户端就可以测试效果了

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多