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

Java网络函数:Socket和ServerSocket的使用示例

发布时间:2023-06-04 22:50:12

Java中的Socket和ServerSocket是基于TCP协议的网络编程函数,它们可以用于实现客户端和服务端之间的通信。在本文中,我们将使用一个简单的示例来介绍如何使用这两个函数。

客户端:

1. 创建Socket对象,指定服务器的地址和端口号。

2. 获取输出流,向服务器发送数据。

3. 获取输入流,从服务器接收数据。

4. 关闭Socket对象,释放资源。

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

public class Client {
    public static void main(String[] args) {
        Socket socket = null;
        try {
            // 创建Socket对象,指定服务器地址和端口号
            socket = new Socket("localhost", 8888);

            // 获取输出流,向服务器发送数据
            OutputStream os = socket.getOutputStream();
            PrintWriter pw = new PrintWriter(os);
            pw.write("用户名:admin;密码:123456");
            pw.flush();

            // 获取输入流,从服务器接收数据
            InputStream is = socket.getInputStream();
            BufferedReader br = new BufferedReader(new InputStreamReader(is));
            String response = br.readLine();
            System.out.println("服务器返回:" + response);

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (socket != null) {
                    socket.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

服务端:

1. 创建ServerSocket对象,指定监听的端口号。

2. 调用accept()方法,等待客户端的连接。

3. 获取输入流,从客户端接收数据。

4. 获取输出流,向客户端发送数据。

5. 关闭Socket对象,释放资源。

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

public class Server {
    public static void main(String[] args) {
        ServerSocket serverSocket = null;
        Socket socket = null;
        try {
            // 创建ServerSocket对象,指定监听的端口号
            serverSocket = new ServerSocket(8888);
            System.out.println("服务器已启动,端口号:8888");

            // 调用accept()方法,等待客户端的连接
            socket = serverSocket.accept();
            System.out.println("客户端已连接");

            // 获取输入流,从客户端接收数据
            InputStream is = socket.getInputStream();
            BufferedReader br = new BufferedReader(new InputStreamReader(is));
            String message = br.readLine();
            System.out.println("客户端发送:" + message);

            // 获取输出流,向客户端发送数据
            OutputStream os = socket.getOutputStream();
            PrintWriter pw = new PrintWriter(os);
            pw.write("您好,欢迎连接服务器!");
            pw.flush();

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (socket != null) {
                    socket.close();
                }
                if (serverSocket != null) {
                    serverSocket.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

在上述代码中,我们首先创建了一个ServerSocket对象,并指定了监听的端口号为8888。然后在服务端调用accept()方法,等待客户端的连接。

当客户端连接成功后,我们通过获取Socket对象的输入流和输出流来进行数据的传送。在客户端中,我们向服务器发送了一条数据,而在服务端中,我们向客户端发送了一条欢迎语。

最后,我们通过关闭Socket和ServerSocket对象来释放资源。

需要注意的是,Socket和ServerSocket在使用完毕后需要手动关闭,以免造成程序的资源浪费和安全问题。

总结:

Socket和ServerSocket是Java中实现TCP协议网络编程的函数,它们可以用于实现客户端和服务端之间的通信。在使用这些函数时,我们需要注意以下几点:

1. 在创建Socket和ServerSocket对象时,需要指定所要监听的端口号。

2. 在使用完毕后,需要手动关闭Socket和ServerSocket对象,以释放资源。

3. 在进行数据传输时,需要通过输入流和输出流来进行数据的收发。

我们可以在实际项目中,基于这些函数编写适用于自己的网络编程模块。