java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > Java之ServerSocket使用

Java之ServerSocket使用及说明

作者:Java杨永杰

本文介绍了Java中ServerSocket类的使用方法,包括创建ServerSocket对象、绑定端口、监听连接请求、接受连接、关闭连接等常用方法,还通过两个案例分别展示了如何使用ServerSocket实现TCP和UDP通信

前言

Java中的ServerSocket是一种用于建立服务器端socket的类。它允许程序在指定端口上监听客户端的连接请求,并在连接成功后与客户端进行数据交互。

ServerSocket类提供了一些方法,用于控制服务器端socket的行为,如绑定端口、监听连接请求、接受连接、关闭连接等。

常用方法

以下是ServerSocket类的一些常用方法:

使用

ServerSocket的使用步骤如下:

ServerSocket的常见应用场景包括:建立Web服务器、FTP服务器、邮件服务器等需要监听客户端连接请求的网络服务。

案例

1.实现TCP

要使用ServerSocket实现TCP连接,可以按照以下步骤进行操作:

ServerSocket serverSocket = new ServerSocket(port);
Socket socket = serverSocket.accept();
// 从客户端读取数据
InputStream inputStream = socket.getInputStream();
DataInputStream dataInputStream = new DataInputStream(inputStream);
String clientMessage = dataInputStream.readUTF();

// 向客户端发送数据
OutputStream outputStream = socket.getOutputStream();
DataOutputStream dataOutputStream = new DataOutputStream(outputStream);
dataOutputStream.writeUTF("Hello Client!");
serverSocket.close();

完整的示例代码如下:

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

public class TCPServer {

    public static void main(String[] args) {
        int port = 1234;

        try {
            // 创建ServerSocket对象
            ServerSocket serverSocket = new ServerSocket(port);

            System.out.println("Server started and listening on port " + port);

            // 监听并接受客户端的连接请求
            Socket socket = serverSocket.accept();

            System.out.println("Client connected: " + socket.getInetAddress().getHostAddress());

            // 从客户端读取数据
            InputStream inputStream = socket.getInputStream();
            DataInputStream dataInputStream = new DataInputStream(inputStream);
            String clientMessage = dataInputStream.readUTF();
            System.out.println("Received message from client: " + clientMessage);

            // 向客户端发送数据
            OutputStream outputStream = socket.getOutputStream();
            DataOutputStream dataOutputStream = new DataOutputStream(outputStream);
            dataOutputStream.writeUTF("Hello Client!");

            // 关闭连接
            socket.close();
            serverSocket.close();

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

这个示例代码创建了一个简单的TCP服务器,监听在端口1234上。当有客户端连接成功后,服务器会从客户端接收一条消息,并向客户端发送一条回复消息。完成后,服务器关闭连接。

要测试该示例代码,可以编写一个TCP客户端,使用相同的端口号连接到服务器,发送消息并接收回复。

2.实现UDP

要使用ServerSocket实现UDP连接,可以按照以下步骤操作:

DatagramSocket serverSocket = new DatagramSocket(port);
byte[] receiveData = new byte[1024];
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
serverSocket.receive(receivePacket);
String clientMessage = new String(receivePacket.getData(), 0, receivePacket.getLength());
InetAddress clientIPAddress = receivePacket.getAddress();
int clientPort = receivePacket.getPort();
String serverMessage = "Hello Client!";
byte[] sendData = serverMessage.getBytes();
DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, clientIPAddress, clientPort);
serverSocket.send(sendPacket);
serverSocket.close();

完整的示例代码如下:

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

public class UDPServer {

    public static void main(String[] args) {
        int port = 1234;

        try {
            // 创建DatagramSocket对象
            DatagramSocket serverSocket = new DatagramSocket(port);

            System.out.println("Server started and listening on port " + port);

            // 创建一个字节数组用于接收数据
            byte[] receiveData = new byte[1024];

            // 创建一个DatagramPacket对象,用于接收数据
            DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);

            // 接收从客户端发送的数据
            serverSocket.receive(receivePacket);

            // 获取接收到的数据和客户端的信息
            String clientMessage = new String(receivePacket.getData(), 0, receivePacket.getLength());
            InetAddress clientIPAddress = receivePacket.getAddress();
            int clientPort = receivePacket.getPort();

            System.out.println("Received message from client: " + clientMessage);

            // 向客户端发送数据
            String serverMessage = "Hello Client!";
            byte[] sendData = serverMessage.getBytes();
            DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, clientIPAddress, clientPort);
            serverSocket.send(sendPacket);

            // 关闭连接
            serverSocket.close();

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

这个示例代码创建了一个简单的UDP服务器,监听在端口1234上。当有客户端发送数据时,服务器会接收并打印出来,然后向客户端发送一条回复消息。完成后,服务器关闭连接。

要测试该示例代码,可以编写一个UDP客户端,使用相同的端口号连接到服务器,发送数据并接收回复。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文