前言

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客户端,使用相同的端口号连接到服务器,发送数据并接收回复。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论