专注于 JetBrains IDEA 全家桶,永久激活,教程
持续更新 PyCharm,IDEA,WebStorm,PhpStorm,DataGrip,RubyMine,CLion,AppCode 永久激活教程

网络编程(InetAddress类、UDP、TCP)

1、InetAddress类

(1)IP和端口号:

IP(InternetProtocol,IP)互联网协议地址:唯一标识一台计算机。

端口号:用于区分不同的应用程序。取值范围是0~65535,其中0~1023被系统保留。

35_1.png

在计算机A访问计算机B是通过IP地址进行查找的,接着在计算机B上通过应用程序的端口号找到相应的程序。

(2)InetAddress类常用方法:

import java.net.InetAddress;
import java.net.UnknownHostException;

public class InetAddressDemo {
    public static void main(String[] args) {

        try {
            InetAddress local = InetAddress.getLocalHost();

            System.out.println(local.getHostAddress());// 返回本地主机地址
            System.out.println(local.getHostName());// 主机名

            InetAddress address = InetAddress.getByName("主机名");
            System.out.println(address);

        } catch (UnknownHostException e) {
            e.printStackTrace();
        }
    }
}

2、UDP协议

(1)概念:

UDP (User Datagram Protocol)用户数据报协议,在数据传输时彼此之间不需要建立连接,传输前需要把数据定义成数据报,并且传输效率高,但是不安全。

(2)DatagramPacket类

用于封装UDP通信中发送和接收的数据。

35_2.png

第一个构造方法指明了数据包的大小,用于接收数据。

第二个构造方法指明了数据包的大小,目标地址、端口号,用于发送数据。

(3)DatagramSocket类

接收和发送数据包。

35_3.png

35_4.png

第一个构造方法中,系统会随机分配一个空闲端口,用于发送端。

第二个构造方法,需要指定端口号,既可以用于发送端也可用于接收端。

(4)应用:

发送端:

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 Send {
    public static void main(String[] args) {
        while (true) {
            DatagramSocket send;
            System.out.println("请输入数据:");

            Scanner sc = new Scanner(System.in); String str = sc.next(); try { send = new DatagramSocket(3001);// 发送数据包 byte[] buffer = str.getBytes(); DatagramPacket dp = new DatagramPacket(buffer, buffer.length, InetAddress.getByName("主机名"), 3000);// 封装数据 // InetAddress.getByName("主机名"),获取端口号 send.send(dp);// 发送 send.close(); } catch (SocketException e) { e.printStackTrace(); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } } }

接收端:

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

public class Receive {
    public static void main(String[] args) throws SocketException {

        DatagramSocket receive = new DatagramSocket(3000);

        byte[] buf = new byte[1024];
        while (true) { DatagramPacket dp = new DatagramPacket(buf, 1024); try { receive.receive(dp); } catch (IOException e) { e.printStackTrace(); } String strRecv = new String(dp.getData(), 0, dp.getLength()) + " " + "来自" + dp.getAddress() + " " + dp.getPort(); System.out.println(strRecv); } } }

3、TCP通信

(1)概念:

TCP通信分为客户端和服务器端,实现通信必须由客户端连接服务端。

(2)Socket类(客户端):

35_5.png

35_6.png

可以指定IP地址和端口号,可以根据IP和端口号运行服务端程序,只是IP地址的形式不同。

(3)ServerSocket类(服务器端):

35_7.png

没有绑定端口号,需要调用bind方法。

可以绑定端口号,默认最大连接数量为50。

可以绑定端口号,指定最大连接数量。

可以绑定端口号,指定最大连接数量、IP地址。适用于计算机上有多块网卡和多个 IP。

(4)应用:

客户端,可以一直发送数据:

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;

public class Client {
    public static void main(String[] args) throws UnknownHostException,
            IOException {
        Socket s = new Socket(InetAddress.getByName("DESKTOP-R14D2UH"), 7999);// 通过IP和端口号连接服务器
        OutputStream out = s.getOutputStream();

        out.write("客户端已启动".getBytes());
        InputStream in = s.getInputStream(); byte[] buffer = new byte[1024]; int length = in.read(buffer); System.out.println(new String(buffer, 0, length)); while (true) { Scanner sc = new Scanner(System.in); System.out.println("请输入数据到服务器:"); String str = sc.next(); out.write(str.getBytes()); } } }

服务器,一直接收客户端发送的数据:

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

public class Server {
    public static void main(String[] args) throws IOException {
        ServerSocket ss = new ServerSocket(7999);
        Socket s = ss.accept();// 在服务端的指定端口监听客户端发来的连接请求,并与之连接
        OutputStream out = s.getOutputStream();
        out.write("你已经连接上了服务器".getBytes());// 字节输出
        while(true){ InputStream in = s.getInputStream(); byte[] buffer = new byte[1024]; int length = in.read(buffer); System.out.println(new String(buffer, 0, length));} } }

文章永久链接:https://tech.souyunku.com/22628

未经允许不得转载:搜云库技术团队 » 网络编程(InetAddress类、UDP、TCP)

JetBrains 全家桶,激活、破解、教程

提供 JetBrains 全家桶激活码、注册码、破解补丁下载及详细激活教程,支持 IntelliJ IDEA、PyCharm、WebStorm 等工具的永久激活。无论是破解教程,还是最新激活码,均可免费获得,帮助开发者解决常见激活问题,确保轻松破解并快速使用 JetBrains 软件。获取免费的破解补丁和激活码,快速解决激活难题,全面覆盖 2024/2025 版本!

联系我们联系我们