Java網絡編程,新手入門

一.首先是網絡編程的三要素:IP地址,端口號,通信協議

1.IP地址:通過docs命令:ipconfig
在這裏插入圖片描述
可以通過ping ip命令查看當前ip是否通暢:
在這裏插入圖片描述
2. 端口號:正在運行的程序標識。有效端口:0-65535,其中0~1024系統使用或保留端口,所以端口儘量要用1024以上的,可以使用netstat -ano命令查看所有運行程序的端口。太長了這裏截取一部分
在這裏插入圖片描述
3.通信協議:
常見的有兩種協議:
TCP和UDP協議
UDP:
將數據源和目的地封裝到數據包中,不需要建立連接。
每個數據包的大小限制在64K。
因爲不建立連接,所以安全性差,速度快。
TCP:
建立連接形成傳輸數據的通道,然後再傳輸數據,通過三次握手。
安全性高,效率低。

二.具體實現步驟

1.UDP協議方式:
UDPSend.java

package ch.hp.udp;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

/**
 * socket 網絡編程之UDP協議 發送方
 */
public class UDPSend {
    public static void main(String[] args) throws Exception {
        DatagramSocket socket = new DatagramSocket();//創建DatagramSocket對象
        String data = "UDP......";//要發送的數據
        InetAddress inetAddress = InetAddress.getByName("127.0.0.1");
        DatagramPacket packet = new DatagramPacket(data.getBytes(),0,data.length(),inetAddress,9999);
        socket.send(packet);//發送
        socket.close();//關閉

    }
}

UDPReceive.java

package ch.hp.udp;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;

/**
 * socket 網絡編程之UDP協議 接收方
 */
public class UDPReceive {
    public static void main(String[] args) throws IOException {
        DatagramSocket socket = new DatagramSocket(9999);
        //創建數據包對象 ,用於接收發送方發送的字節數組的數據
        DatagramPacket packet = new DatagramPacket(new byte[4096],4096);

        socket.receive(packet);//接收數據

        byte[] data = packet.getData();//取出接收數據的內容
        int length = data.length;//取出數據的長度
        String result = new String(data,0,length);

        System.out.println(result);//打印接收的數據
        socket.close();

    }
}

結果:
在這裏插入圖片描述2.TCP協議方式:
ServerDemo.java

package ch.hp.tcp;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * socket 網絡編程之TCP協議 服務端
 */
public class ServerDemo {

    public static void main(String[] args) throws IOException {
        ServerSocket serverSocket = new ServerSocket(7777);
        Socket socket = serverSocket.accept();//調用accept拿到一個socket對象

        //拿到輸入輸出流
        InputStream is = socket.getInputStream();
        OutputStream os = socket.getOutputStream();

        os.write("我是服務端響應道客戶端的數據".getBytes());

        //讀取客戶端發送的請求參數
        byte[] bytes = new byte[1024];
        int len = is.read(bytes);
        //將讀取的數據打印出來
        String result = new String(bytes,0,len);
        System.out.println(result);

    }
}

ClientDemo.java

package ch.hp.tcp;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;

/**
 * socket 網絡編程之TCP協議 客戶端
 */
public class ClientDemo {

    public static void main(String[] args) throws IOException {
        //創建Socket對象,傳入主機ip和端口
        Socket socket = new Socket(InetAddress.getByName("127.0.0.1"),7777);
        //輸入流,用於讀取服務端的數據
        InputStream is = socket.getInputStream();
        //輸出流,用於向服務端寫數據
        OutputStream os = socket.getOutputStream();

        //讀取服務端的數據
        byte[] bytes = new byte[1024];
        int len = is.read(bytes);
        //將讀取的數據打印出來
        String result = new String(bytes,0,len);
        System.out.println(result);
        //向服務端寫數據
        os.write("我是客戶端寫入服務端的數據".getBytes());
        socket.close();

    }
}

TCP協議方式,注意需要先運行服務端;結果
在這裏插入圖片描述在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章