首页 > 编程语言 >Java的网络编程?

Java的网络编程?

时间:2024-08-07 21:55:25浏览次数:15  
标签:Java String java 编程 网络 import new net Socket

Java 的网络编程涉及使用 Java 的 API 来创建和管理网络应用程序,例如客户端和服务器之间的通信。Java 提供了一系列的类和接口来支持网络编程,主要包括 java.net 包中的功能。网络编程通常包括以下几个方面:

Java 网络编程的基本概念

  1. 协议

    • TCP/IP(传输控制协议/网际协议):一种面向连接的协议,提供可靠的数据传输。Java 提供了对 TCP/IP 协议的支持。
    • UDP(用户数据报协议):一种无连接的协议,不保证数据的可靠传输。适用于对实时性要求较高但可以容忍数据丢失的场景。
  2. Socket 编程

    • Socket 是网络通信的端点,可以是客户端或服务器的一部分。Java 的 java.net 包提供了对 Socket 的支持,包括 TCP 和 UDP Socket。

关键类和接口

Socket

  • 用于 TCP 连接的客户端。通过 Socket 可以连接到服务器,进行数据的发送和接收。
    import java.io.*;
    import java.net.*;
    
    public class Client {
        public static void main(String[] args) {
            try (Socket socket = new Socket("localhost", 8080);
                 PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
                 BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()))) {
    
                out.println("Hello, Server");
                String response = in.readLine();
                System.out.println("Server response: " + response);
    
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    

ServerSocket

  • 用于 TCP 连接的服务器端。通过 ServerSocket 创建一个监听指定端口的服务器,等待客户端连接。
    import java.io.*;
    import java.net.*;
    
    public class Server {
        public static void main(String[] args) {
            try (ServerSocket serverSocket = new ServerSocket(8080)) {
                System.out.println("Server started. Waiting for connection...");
    
                try (Socket clientSocket = serverSocket.accept();
                     PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
                     BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()))) {
    
                    String message = in.readLine();
                    System.out.println("Client says: " + message);
                    out.println("Hello, Client");
    
                } catch (IOException e) {
                    e.printStackTrace();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    

DatagramSocket

  • 用于 UDP 连接。提供无连接的数据报服务,可以发送和接收数据报。
    import java.io.IOException;
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.net.InetAddress;
    
    public class UDPClient {
        public static void main(String[] args) {
            try (DatagramSocket socket = new DatagramSocket()) {
                String message = "Hello, UDP Server";
                byte[] buffer = message.getBytes();
                DatagramPacket packet = new DatagramPacket(buffer, buffer.length, InetAddress.getByName("localhost"), 9876);
                socket.send(packet);
    
                byte[] receiveBuffer = new byte[1024];
                DatagramPacket receivePacket = new DatagramPacket(receiveBuffer, receiveBuffer.length);
                socket.receive(receivePacket);
    
                String response = new String(receivePacket.getData(), 0, receivePacket.getLength());
                System.out.println("Server response: " + response);
    
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    
    import java.io.IOException;
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    
    public class UDPServer {
        public static void main(String[] args) {
            try (DatagramSocket socket = new DatagramSocket(9876)) {
                byte[] receiveBuffer = new byte[1024];
                DatagramPacket receivePacket = new DatagramPacket(receiveBuffer, receiveBuffer.length);
                socket.receive(receivePacket);
    
                String message = new String(receivePacket.getData(), 0, receivePacket.getLength());
                System.out.println("Client says: " + message);
    
                String response = "Hello, UDP Client";
                byte[] responseBuffer = response.getBytes();
                DatagramPacket responsePacket = new DatagramPacket(responseBuffer, responseBuffer.length, receivePacket.getAddress(), receivePacket.getPort());
                socket.send(responsePacket);
    
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    

URLURLConnection

  • 用于处理 HTTP/HTTPS 协议的网络请求和响应。
    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.net.HttpURLConnection;
    import java.net.URL;
    
    public class URLExample {
        public static void main(String[] args) {
            try {
                URL url = new URL("https://api.github.com");
                HttpURLConnection connection = (HttpURLConnection) url.openConnection();
                connection.setRequestMethod("GET");
    
                BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
                String inputLine;
                StringBuilder content = new StringBuilder();
    
                while ((inputLine = in.readLine()) != null) {
                    content.append(inputLine);
                }
    
                in.close();
                connection.disconnect();
    
                System.out.println("Response: " + content.toString());
    
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    

总结

  • Java 网络编程 允许你创建客户端和服务器之间的通信,通过 TCP 和 UDP 协议进行数据传输。
  • Socket 编程:用于创建客户端和服务器端之间的连接。
  • DatagramSocket:用于无连接的 UDP 通信。
  • URL 和 URLConnection:用于 HTTP/HTTPS 请求处理。

Java 的网络编程功能强大且灵活,能够支持各种网络应用程序的开发。通过这些 API,你可以实现复杂的网络交互和数据处理。

标签:Java,String,java,编程,网络,import,new,net,Socket
From: https://blog.csdn.net/m0_57083961/article/details/140938217

相关文章

  • 阻塞队列(java)
    阻塞队列(BlockingQueue)是一个线程安全的队列,支持阻塞的插入和移除操作。它常用于生产者-消费者问题等多线程环境中。以下是一个简单的Java实现,展示了如何使用 BlockingQueue 来实现一个基本的阻塞队列示例importjava.util.concurrent.ArrayBlockingQueue;importjava.......
  • 几种常见分类神经网络
    时间:2024年8月4日AlexNet(2012)背景AlexNet问世之前1.浅层网络结构主要使用较浅的神经网络,深层网络尚未广泛应用,限制了模型的表现力和复杂任务处理能力。2.依赖手工设计特征图像识别任务依赖手工设计的特征提取方法(如SIFT和HOG),需要大量领域知识进行特征工程。3.计算资......
  • linux 软件编程学习第八天 线程
    进程1.waitpid   pid_twaitpid(pid_tpid,int*wstatus,intoptions);  功能:    回收指定的子进程空间  参数:    pid:要回收的子进程的pid    wstatus:回收状态的指针    options:回收选项      0阻......
  • Java跨平台原理
    Java跨平台的原理主要基于以下几个关键点:Java虚拟机(JVM)Java虚拟机是Java跨平台的核心技术。它是一个软件程序,可以在不同的操作系统上运行Java程序,并把Java程序翻译成可执行代码。JVM是一个虚构出来的计算机,通过在实际的计算机上仿真模拟各种计算机功能来实现。不同平台上的JVM......
  • 基于java+ssm+vue的自驾游拼团微信小程序
    ......
  • 【Java】NIO-从入门到精通-Netty先修课-全网最全-综合案例分析
    XiaoYongCai2024/8/6一:AboutByteBuffer1.ByteBuffer用法在JavaNIO中,Buffer是一个用于存储特定基本类型数据的容器,ByteBuffer是最常用的Buffer类型,用于存储字节序列。以下是ByteBuffer的读写操作分析:A.Buffer的基本属性capacity:缓冲区的容量,即可以存储的最大数......
  • 转发wsa和安卓模拟器网络
    adb连接上设备后,执行执行端口转发adbforwardtcp:6789tcp:888'就可以了,把设备的8888端口转发到本机6789,本机postman之类直接访问127.0.0.1:6789即可其他笔记:连接wsa:adbconnect127.0.0.1:58526连接安卓模拟器:adbconnectemulator-5554安装appadb-s127.......
  • java
    类变量方法区、永久代、元空间的区别方法区,是《JVM规范》定义的,所有虚拟机必须有的。PermGenspace则是HotSpot虚拟机基于《JVM规范》对方法区的一个落地实现。针对HotSpot虚拟机,JDK7及之前,PermGenspace就是方法区。JDK8及之后,PermGenspace被移......
  • java反射机制
    反射的原理Java反射机制概述JavaReflection(1)Reflection(反射)是被视为动态语言的关键,反射机制允许程序在执行期借助于ReflectionAPI取得任何类的内部信息,并能直接操作任意对象的内部属性及方法。(2)加载完类之后,在堆内存的方法区中就产生了一个Class类型的对象(一个类只有一个Cl......
  • Nginx反向代理,代理H5前端 ,java后端,使用服务器+finalshell+vpn
    使用前确认已经安装好nginx,这里我使用的是普通的nginx,注意不是Docker版本的nginx输入nginx-t查询一下,自己的nginxconfig.nginx在那个包下,方便查询 使用catnginx.conf命令,进入需要配置的conf中(这个是我使用的server[server{listen82;s......