1. 程式人生 > >java 網路程式設計之UDP

java 網路程式設計之UDP

網路程式設計(UDP傳輸)

*1.傳送Send

* 建立DatagramSocket, 隨機埠號* 建立DatagramPacket, 指定資料, 長度, 地址, 埠* 使用DatagramSocket傳送DatagramPacket* 關閉DatagramSocket

* 2.接收Receive

* 建立DatagramSocket, 指定埠號* 建立DatagramPacket, 指定陣列, 長度* 使用DatagramSocket接收DatagramPacket* 關閉DatagramSocket* 從DatagramPacket中獲取資料

* 3.接收方獲取ip和埠號

* String ip = packet.getAddress().getHostAddress();* int port = packet.getPort();

* 4.案例:

package com.th.socket;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.Scanner;
/**
 * Created by Administrator on 2018/6/6.
* 網路程式設計之UDP socket程式設計 * 1- 建立DatagramSocket,指定埠號 (建立碼頭) * 2- 建立DatagramPacket, 指定資料 (建立包裝箱) * 3- 使用DatagramSocket 傳送DatagramPacket * 4- 關閉DatagramSocket */ public class UDP_send_01 { public static void main(String[] args) throws Exception { new Thread(new Runnable() { @Override
public void run() { try { messageSend(); } catch (IOException e) { e.printStackTrace(); } } }).start(); new Thread(new Runnable() { @Override public void run() { try { messageReceive(); } catch (IOException e) { e.printStackTrace(); } } }).start(); } /** * * 網路程式設計之UDP socket程式設計 * 1- 建立DatagramSocket,指定埠號 (建立碼頭) * 2- 建立DatagramPacket, 指定資料 (建立包裝箱) * 3- 使用DatagramSocket 接收DatagramPacket * 4- 關閉DatagramSocket * 5- 從DatagramPacket中獲取資料 * @throws IOException */ private static void messageReceive() throws IOException { //1- 建立DatagramSocket,指定埠號 (建立碼頭) DatagramSocket socket = new DatagramSocket(6666); //2- 建立DatagramPacket, 指定資料 (建立包裝箱) DatagramPacket datagramPacket = new DatagramPacket(new byte[1024], 1024); while ( true ){ //3- 使用DatagramSocket 接收DatagramPacket socket.receive(datagramPacket); // 使用記憶體輸入流將位元組轉成字串 處理有中文時的亂碼 ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(datagramPacket.getData(), datagramPacket.getOffset(), datagramPacket.getLength()); InputStreamReader inputStreamReader = new InputStreamReader(byteArrayInputStream); BufferedReader bufferedReader = new BufferedReader(inputStreamReader); String str = bufferedReader.readLine(); bufferedReader.close(); // 5- 從DatagramPacket中獲取資料 // 5-1 獲取資料 //byte[] data = datagramPacket.getData(); //int len = datagramPacket.getLength(); if ( "exit".equalsIgnoreCase(str) ) { break; } System.out.println(datagramPacket.getAddress().getHostAddress()); System.out.println(datagramPacket.getPort()); System.out.println(datagramPacket.getSocketAddress()); System.out.println(datagramPacket.getAddress().getHostName()); System.out.println(str); } //4- 關閉DatagramSocket socket.close(); } /** * * 網路程式設計之UDP socket程式設計 * 1- 建立DatagramSocket,指定埠號 (建立碼頭) * 2- 建立DatagramPacket, 指定資料 (建立包裝箱) * 3- 使用DatagramSocket 傳送DatagramPacket * 4- 關閉DatagramSocket * @throws IOException */ private static void messageSend() throws IOException { Scanner scanner = new Scanner(System.in); // 1- 建立DatagramSocket,指定埠號 (建立碼頭) DatagramSocket socket = new DatagramSocket(); // 2- 建立DatagramPacket, 指定資料 (建立包裝箱) //String src = "Hello!你好啊!"; while ( true ){ String src = scanner.nextLine(); DatagramPacket datagramPacket = new DatagramPacket(src.getBytes(), src.getBytes().length, InetAddress.getByName("127.0.0.1"), 6666); // 3- 使用DatagramSocket 傳送DatagramPacket if ( "exit".equalsIgnoreCase(src) ) { socket.send(datagramPacket); break; } socket.send(datagramPacket); } // 4- 關閉DatagramSocket socket.close(); } }