欢迎访问宙启技术站
智能推送

Java中使用Socket类和URL类的函数实现网络编程

发布时间:2023-06-21 22:09:18

网络编程是指通过计算机网络进行通信的编程,用Java语言实现网络编程通常使用Socket类和URL类。

Socket类是Java中用于实现网络通信的基础类,它在应用程序中负责处理和传输网络数据。Socket类可以创建客户端套接字和服务器套接字,使用TCP或UDP协议进行通信。

如下是Socket类的主要方法:

1. Socket()

构造一个新的套接字对象。

2. connect()

连接到远程计算机的套接字。

3. getInputStream()

返回此套接字的输入流。

4. getOutputStream()

返回此套接字的输出流。

5. close()

关闭此套接字。

URL类是Java中用于访问网络资源的基础类,它提供了访问Web和FTP等远程资源的方法。

如下是URL类的主要方法:

1. URL(String url)

创建一个URL对象,其字符串表示形式为指定的协议、主机、端口和路径组成的URL。

2. openConnection()

打开到此URL所表示的资源的通信链接。

3. getInputStream()

返回URL所指定的资源的输入流。

4. getOutputStream()

返回URL所指定的资源的输出流。

5. getContent()

获取URL所指定的资源的内容。

6. getFile()

获取URL所指定的资源的文件名。

7. getHost()

获取URL所指定的资源的主机名。

8. getPath()

获取URL所指定的资源的路径名。

下面以实现一个简单的客户端和服务器应用程序为例,演示Socket类的使用。

在这个应用程序中,客户端向服务器发送一个数值,服务器将返回数值的平方并显示在客户端。具体实现如下:

服务器端代码:

import java.io.*;
import java.net.*;

class Server
{
    public static void main(String[] args) throws Exception
    {
        ServerSocket ss = new ServerSocket(8080); // 创建服务器套接字
        System.out.println("服务端启动...");
        
        Socket s = ss.accept(); // 等待客户端连接
        System.out.println("已连接客户端: " + s.getInetAddress().getHostAddress());
        
        BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream())); // 获取客户端输入流
        PrintWriter pw = new PrintWriter(s.getOutputStream()); // 获取客户端输出流
        
        String str = br.readLine(); // 读取客户端发送过来的数据
        int num = Integer.parseInt(str);
        int result = num * num;
        
        pw.println(result); // 向客户端返回计算结果
        pw.flush();
        
        s.close(); // 关闭套接字
    }
}

客户端代码:

import java.io.*;
import java.net.*;

class Client
{
    public static void main(String[] args) throws Exception
    {
        Socket s = new Socket("127.0.0.1", 8080); // 创建客户端套接字,连接服务器
        System.out.println("已连接服务器...");
        
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); // 创建输入流
        
        PrintWriter pw = new PrintWriter(s.getOutputStream()); // 获取输出流
        BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream())); // 获取输入流
        
        String str = br.readLine(); // 从控制台读取数据
        pw.println(str); // 将数据发送给服务器
        pw.flush();
        
        String result = in.readLine(); // 读取服务器返回的数据
        System.out.println("计算结果: " + result); // 显示计算结果
        
        s.close(); // 关闭套接字
    }
}

而对于URL类的使用,以下是一个简单的示例:

import java.io.*;
import java.net.*;

class URLTest
{
    public static void main(String[] args) throws Exception
    {
        URL url = new URL("https://www.baidu.com"); // 创建URL对象
        
        BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream())); // 打开URL连接并获取输入流
        
        String inputLine;
        while ((inputLine = in.readLine()) != null) // 逐行读取输入流中的内容
        {
            System.out.println(inputLine); // 输出
        }
        
        in.close(); // 关闭输入流
    }
}

以上代码将输出百度首页的网页源码。在实际开发中,使用URL类可以获取远程文件、读取网页内容等。而结合Socket类,通过实现自定义协议可以实现更复杂的网络通信。