當前位置:編程學習大全網 - 編程語言 - udp連接兩個電腦

udp連接兩個電腦

關於UDP:將數據及源和目的封裝成數據包中,不需要建立連接;每個數據報的大小在限制在64k內;因無連接,是不可靠協議;不需要建立連接,速度快

使用udp協議主要涉及到兩個類:DatagramSocket,DatagramPacket

DatagramSocket: 用於建立壹個數據包的出口或入口,構造方法中有IP的都是用於接收方的

DatagramPacket: 用於包裝數據,構造方法中有IP的都是用於發送方的

可以將其比作發送包裹,DatagramSocket就是快遞公司,選擇哪壹個快遞公司並不會影響包裹的發送;而DatagramPacket則是妳的包裹,上面必須寫明地址(IP)和門牌號(port:端口號).

下面的程序,兩臺電腦各運行壹個,只需要將IP改為接收方的IP,端口號改為妳電腦上面空余的端口號(電腦的端口號是0--65535,1024以內是系統的,所以壹般建議使用1024以外的端口號)

import java.io.IOException;import java.net.DatagramPacket;import java.net.DatagramSocket;import java.net.InetAddress;import java.net.SocketException;import java.net.UnknownHostException;import java.util.Scanner;public class Chat { public static void main(String[] args) { DatagramSocket sendsocket = null; DatagramSocket receiceSocket = null; try { sendsocket = new DatagramSocket(); receiceSocket = new DatagramSocket(8888,InetAddress.getByName("127.0.0.1")); } catch (SocketException e) { e.printStackTrace(); } catch (UnknownHostException e) { e.printStackTrace(); } new Thread(new Send(sendsocket)).start(); new Thread(new Receive(receiceSocket)).start(); }}class Send implements Runnable{ DatagramSocket socket = null; public Send(DatagramSocket socket) { this.socket = socket; } @Override public void run() { byte[] buf = new byte[1024]; DatagramPacket packet = null; Scanner scanner = new Scanner(System.in); while(true) { String data = scanner.nextLine(); if("over".equalsIgnoreCase(data)) { break; } buf = data.getBytes(); try { //接收方的IP和端口號 packet = new DatagramPacket(buf, buf.length, InetAddress.getByName("127.0.0.1"), 9999); socket.send(packet); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } scanner.close(); }}class Receive implements Runnable{ DatagramSocket socket; public Receive(DatagramSocket socket) { this.socket = socket; } @Override public void run() { while(true) { byte[]buf = new byte[1024]; DatagramPacket packet = new DatagramPacket(buf, buf.length); try { socket.receive(packet); } catch (IOException e) { e.printStackTrace(); break; } String text = new String(packet.getData(), 0, packet.getLength()); String ip = packet.getAddress().getHostAddress(); if("over".equalsIgnoreCase(text)) { break; } System.out.println(ip+" : "+text); } socket.close(); } }

在發送端,要在數據包對象中明確目的地IP及端口

DatagramSocket ds = new DatagramSocket();byte[] by = “hello,udp”.getBytes();DatagramPacket dp = new DatagramPacket(by,0,by.length, InetAddress.getByName(“127.0.0.1”),10000);ds.send(dp);ds.close();

在接收端,要指定監聽的端口

DatagramSocket ds = new DatagramSocket(10000);byte[] by = new byte[1024];DatagramPacket dp = new DatagramPacket(by,by.length);ds.receive(dp);String str = new String(dp.getData(),0,dp.getLength());System.out.println(str+"--"+dp.getAddress());ds.close();

  • 上一篇:我的世界2021指令匯總最新指令代碼大全
  • 下一篇:學計算機編程哪個好?
  • copyright 2024編程學習大全網