Java 基於UDP的Socket網路程式設計的入門及示例
阿新 • • 發佈:2019-01-10
前言:天吶!這兩天上班就像走鋼絲啊,老大家裡出事請假一週,手機關機,底層無人照看,機器又忙著定標,技術盲老闆事事問我這個底層小白。做人好難吶。。。還是祝願老大家裡沒有大礙吧,也保佑自己明天能安然度過。。保佑保佑。
原文出處:http://blog.csdn.net/u014158743/article/details/52928781
udp協議實現資料的基本傳送與接收
UdpReceive
/**
* 使用 udp協議實現資料的接收
* 1:建立Socket端點,實現資料的接收,同時要監聽埠
* 2:建立用來接收資料的資料報包
* 3:使用 Socket的接收功能接收資料
* @throws IOException
*/
public static void main(String[] args) throws IOException {
System.out.println("接收方啟動.....");
//1:建立Socket端點,實現資料的接收
DatagramSocket socket = new DatagramSocket(22222);
//2:建立了一個空的資料報包用來接收資料
byte[] arr = new byte[1024];
DatagramPacket packet = new DatagramPacket(arr, arr.length);
//3:使用 Socket的接收功能接收資料
//接收資料就是從網路讀取資料
socket.receive(packet);
//解析接收的資料
//解析資料
byte[] data = packet.getData();//得到接收的資料
String shuju = new String(data,0,packet.getLength());
//得到傳送方的ip地址
InetAddress address = packet.getAddress();
String ip = address.getHostAddress();
//得到傳送方傳送資料使用的埠
int port = packet.getPort();
System.out.println(ip+":"+port+":"+shuju);
socket.close();
}
UdpSend
/**
* 使用udp協議實現資料的傳送
* 1:建立 Socket端點,實現資料的傳送
* 2:明確要傳送的資料
* 3:把要傳送的資料打成資料報包
* 4:使用 Socket的傳送功能傳送資料
* @throws IOException
*/
public static void main(String[] args) throws IOException {
System.out.println("傳送方啟動.....");
//1:建立 Socket端點,實現資料的傳送
DatagramSocket socket = new DatagramSocket();//明確了協議
//2:明確要傳送的資料
String ss ="明天放假";
byte[] data = ss.getBytes();
//3:把要傳送的資料打成資料報包
//資料報包指明瞭傳送的資料,接收資料的主機的Ip地址物件,接收資料的主機使用哪個埠接收
DatagramPacket dp = new DatagramPacket(data,data.length, InetAddress.getByName("192.168.1.212"), 22222);
//4:使用 Socket的傳送功能傳送資料
//傳送資料就是向網路輸出資料,所以內部使用了輸出流
socket.send(dp);
socket.close();
}
使用udp實現一直髮送資料與接收資料
UdpSend
/**
* 使用udp實現傳送方可以一直髮送
* 1:建立 Socket端點
* 2:迴圈讀取鍵盤輸入的資料,把每次讀取的資料發出去
* 3:關閉 Socket
* @throws IOException
*/
public static void main(String[] args) throws IOException {
System.out.println("方式方啟動.....");
DatagramSocket s = new DatagramSocket();
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String line = null;
while((line = br.readLine())!=null)
{
if("over".equals(line))
break;
byte[] arr = line.getBytes();
DatagramPacket packet = new DatagramPacket(arr, arr.length, InetAddress.getByName("192.168.1.212"),33333);
s.send(packet);
}
br.close();
s.close();
}
UdpReceive
/**
* 使用udp實現接收方可以一直接收
* @throws IOException
*/
public static void main(String[] args) throws IOException {
System.out.println("接收方啟動....");
DatagramSocket s = new DatagramSocket(33333);
while(true)
{
byte[] arr = new byte[1024];
DatagramPacket packet = new DatagramPacket(arr, arr.length);
s.receive(packet);
String data = new String(packet.getData(),0,packet.getLength());
String ip = packet.getAddress().getHostAddress();
System.out.println(ip+":"+data);
}
//s.close();
}
使用udp實現一個聊天程式
傳送的同時可以接收 建立一個執行緒負責傳送資料 建立一個執行緒負責接收資料
public class UdpChat {
public static void main(String[] args) throws SocketException {
DatagramSocket sendSocket = new DatagramSocket();
DatagramSocket receiveSocket = new DatagramSocket(44444);
new Thread(new Send(sendSocket)).start();
new Thread(new Receive(receiveSocket)).start();
}
}
// 定義傳送執行緒的任務
class Send implements Runnable {
private DatagramSocket socket;
public Send(DatagramSocket socket) {
this.socket = socket;
}
@Override
public void run() {
// 任務是可以一直髮送資料
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String line = null;
try {
while ((line = br.readLine()) != null) {
byte[] data = line.getBytes();
DatagramPacket packet = new DatagramPacket(data, data.length,
InetAddress.getByName("192.168.1.212"), 44444);
socket.send(packet);
if ("baibai".equals(line)) {
break;
}
}
br.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
// 定義接收執行緒的任務
class Receive implements Runnable {
private DatagramSocket socket;
public Receive(DatagramSocket socket) {
this.socket = socket;
}
@Override
public void run() {
// 可以一直接收資料的任務
try {
while(true)
{
byte[] data = new byte[1024];
DatagramPacket packet = new DatagramPacket(data, data.length);
socket.receive(packet);
String shuju = new String(packet.getData(),0,packet.getLength());
String ip = packet.getAddress().getHostAddress();
if("baibai".equals(shuju))
{
System.out.println(ip+"離開了聊天室");
}
System.out.println(ip+":"+shuju);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
晚安,祝工作順利。