当前位置: 代码网 > it编程>编程语言>Java > Java之ServerSocket使用及说明

Java之ServerSocket使用及说明

2025年11月24日 Java 我要评论
前言java中的serversocket是一种用于建立服务器端socket的类。它允许程序在指定端口上监听客户端的连接请求,并在连接成功后与客户端进行数据交互。serversocket类提供了一些方法

前言

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

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

常用方法

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

  • serversocket(int port): 构造器,用于创建一个指定端口的serversocket对象。
  • void bind(socketaddress endpoint):将serversocket绑定到指定的端口,可以是本地或远程端口。
  • socket accept():监听并接受客户端的连接请求,返回一个与客户端建立连接后的socket对象。
  • void close():关闭serversocket以及与之关联的所有socket连接。

使用

serversocket的使用步骤如下:

  • 创建serversocket对象,并指定监听的端口。
  • 调用bind()方法将serversocket绑定到指定端口。
  • 调用accept()方法监听并接受客户端的连接请求。
  • 使用返回的socket对象与客户端进行数据交互。
  • 使用完毕后,调用close()方法关闭serversocket以及与之关联的所有socket连接。

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

案例

1.实现tcp

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

  • 创建serversocket对象,并指定要监听的端口号。
serversocket serversocket = new serversocket(port);
  • 调用accept()方法监听并接受客户端的连接请求。accept()方法会阻塞程序直到有客户端连接成功,并返回与客户端建立连接后的socket对象。
socket socket = serversocket.accept();
  • 使用返回的socket对象与客户端进行数据交互。可以使用inputstream和outputstream来接收和发送数据。
// 从客户端读取数据
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!");
  • 使用完毕后,调用close()方法关闭serversocket以及与之关联的所有socket连接。
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对象,并指定要监听的端口号。
datagramsocket serversocket = new datagramsocket(port);
  • 创建一个字节数组用于接收数据。
byte[] receivedata = new byte[1024];
  • 创建一个datagrampacket对象,用于接收从客户端发送过来的数据。
datagrampacket receivepacket = new datagrampacket(receivedata, receivedata.length);
  • 使用receive()方法从客户端接收数据。该方法会阻塞程序直到接收到数据。
serversocket.receive(receivepacket);
  • 使用datagrampacket对象获取接收到的数据,并进行相应处理。
string clientmessage = new string(receivepacket.getdata(), 0, receivepacket.getlength());
  • 可以使用datagrampacket对象获取客户端的ip地址和端口号。
inetaddress clientipaddress = receivepacket.getaddress();
int clientport = receivepacket.getport();
  • 可以使用datagramsocket对象向客户端发送数据。首先创建一个字节数组和一个datagrampacket对象。
string servermessage = "hello client!";
byte[] senddata = servermessage.getbytes();
datagrampacket sendpacket = new datagrampacket(senddata, senddata.length, clientipaddress, clientport);
  • 使用send()方法将数据发送给客户端。
serversocket.send(sendpacket);
  • 使用完毕后,调用close()方法关闭datagramsocket。
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客户端,使用相同的端口号连接到服务器,发送数据并接收回复。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com