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

Java网络编程函数实战:Socket、Http、TCP等网络编程示例

发布时间:2023-05-24 01:54:52

Java网络编程是指使用Java语言编写程序,实现在计算机网络上进行数据传输和通信的功能。在Java网络编程中常用的函数有Socket、Http、TCP等,在实际开发中,也会运用到这些函数,下面就让我们通过实例来学习这些函数的使用。

Socket函数:

Socket表示套接字,它用于在计算机之间建立网络连接。通过Socket函数,我们可以实现客户机和服务器之间的通信。下面是一个简单的Socket通信实例:

客户端代码:

import java.io.PrintStream;
import java.net.Socket;
import java.util.Scanner;

public class Client {
    public static void main(String[] args) throws Exception {
        //1.创建一个Socket对象,指定要连接的服务器地址和端口号
        Socket socket = new Socket("127.0.0.1", 8888);
        //2.获取输出流,用于发送数据给服务器
        PrintStream ps = new PrintStream(socket.getOutputStream());
        //3.获取输入流,用于读取服务器的响应数据
        Scanner scanner = new Scanner(socket.getInputStream());
        //4.循环输入数据
        while (true) {
            System.out.print("请输入要发送的数据:");
            String data = new Scanner(System.in).nextLine();
            //5.判断是否退出
            if("bye".equalsIgnoreCase(data)){
                break;
            }
            //6.发送数据给服务器
            ps.println(data);
            //7.读取服务器的响应数据
            String response = scanner.nextLine();
            System.out.println("服务器响应数据:"+response);
        }
        //8.关闭资源
        scanner.close();
        ps.close();
        socket.close();
    }
}

服务器端代码:

import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;

public class Server {
    public static void main(String[] args) throws Exception {
        //1.创建一个ServerSocket对象
        ServerSocket serverSocket = new ServerSocket(8888);
        //2.等待客户端连接
        System.out.println("等待客户端连接...");
        Socket socket = serverSocket.accept();
        System.out.println("客户端连接成功!");
        //3.获取输入流,用于读取客户端发送的数据
        Scanner scanner = new Scanner(socket.getInputStream());
        //4.获取输出流,用于向客户端发送响应数据
        PrintStream ps = new PrintStream(socket.getOutputStream());
        //5.循环读取客户端发送的数据
        while (true) {
            String data = scanner.nextLine();
            System.out.println("客户端发送数据:"+data);
            //6.判断客户端是否退出
            if("bye".equalsIgnoreCase(data)){
                break;
            }
            //7.响应客户端发送的数据
            ps.println("服务器响应:"+data);
        }
        //8.关闭资源
        scanner.close();
        ps.close();
        socket.close();
        serverSocket.close();
    }
}

运行程序,我们可以看到客户端会不断向服务器发送数据,服务器则会一直读取和响应客户端发送的数据。

Http函数:

Http表示超文本传输协议,它是一种应用程序层协议,用于在计算机网络上传输超媒体文档和协商其他信息。在Java中,我们可以使用Http函数实现Http通信。下面是一个简单的Http通信实例:

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

public class HttpClient {
    public static void main(String[] args) throws Exception {
        //1.创建一个URL对象
        URL url = new URL("http://www.baidu.com");
        //2.打开一个HttpURLConnection连接对象
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        //3.设置请求方法
        connection.setRequestMethod("GET");
        //4.获取输入流
        BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
        //5.读取响应数据
        String line = null;
        StringBuffer stringBuffer = new StringBuffer();
        while((line = reader.readLine())!=null){
            stringBuffer.append(line);
        }
        //6.关闭资源
        reader.close();
        connection.disconnect();
        //7.输出响应数据
        System.out.println(stringBuffer.toString());
    }
}

运行程序,我们可以看到控制台输出了百度首页的HTML源码。

TCP函数:

TCP表示传输控制协议,是面向连接的协议,保证了数据传输的可靠性。在Java中,我们可以使用TCP函数实现TCP通信。下面是一个简单的TCP通信实例:

客户端代码:

import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.util.Scanner;

public class TCPClient {
    public static void main(String[] args) throws Exception {
        //1.创建一个Socket对象,指定要连接的服务器地址和端口号
        Socket socket = new Socket("127.0.0.1", 8888);
        //2.获取输出流,用于发送数据给服务器
        OutputStream outputStream = socket.getOutputStream();
        //3.获取输入流,用于读取服务器的响应数据
        InputStream inputStream = socket.getInputStream();
        //4.循环输入数据
        while (true) {
            System.out.print("请输入要发送的数据:");
            String data = new Scanner(System.in).nextLine();
            //5.判断是否退出
            if("bye".equalsIgnoreCase(data)){
                break;
            }
            //6.发送数据给服务器
            outputStream.write(data.getBytes());
            //7.读取服务器的响应数据
            byte[] bytes = new byte[1024];
            int len = inputStream.read(bytes);
            String response = new String(bytes,0,len);
            System.out.println("服务器响应数据:"+response);
        }
        //8.关闭资源
        inputStream.close();
        outputStream.close();
        socket.close();
    }
}

服务器端代码:

import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;

public class TCPServer {
    public static void main(String[] args) throws Exception {
        //1.创建一个ServerSocket对象
        ServerSocket serverSocket = new ServerSocket(8888);
        //2.等待客户端连接
        System.out.println("等待客户端连接...");
        Socket socket = serverSocket.accept();
        System.out.println("客户端连接成功!");
        //3.获取输入流,用于读取客户端发送的数据
        InputStream inputStream = socket.getInputStream();
        //4.获取输出流,用于向客户端发送响应数据
        OutputStream outputStream = socket.getOutputStream();
        //5.循环读取客户端发送的数据
        while (true) {
            byte[] bytes = new byte[1024];
            int len = inputStream.read(bytes);
            String data = new String(bytes,0,len);
            System.out.println("客户端发送数据:"+data);
            //6.判断客户端是否退出
            if("bye".equalsIgnoreCase(data)){
                break;
            }
            //7.响应客户端发送的数据
            outputStream.write(("服务器响应:"+data).getBytes());
        }
        //8.关闭资源
        inputStream.close();
        outputStream.close();
        socket.close();
        serverSocket.close();
    }
}

运行程序,我们可以看到客户端会不断向服务器发送数据,服务器则会一直读取和响应客户端发送的数据。与Socket函数相比,TCP函数的优势在于保证了数据传输的可靠性,同时也增加了通信的复杂度。

总结:

通过以上的实例,我们可以看到Java网络编程函数的使用并不复杂,不过在实际开发中,还需要考虑网络通信的稳定性和安全性等问题。因此,我们需要对网络编程有深入的了解和掌握,才能更好地开发网络应用程序。