Java中Socket用法详解
概述
Java中提供了Socket和ServerSocket这两个类用于网络通信,其中Socket是客户端用于构建TCP协议连接的类,而ServerSocket则是服务端用于监听和接受连接请求的类。
Socket
1. 创建Socket
可以通过如下方式创建Socket连接:
Socket socket = new Socket(String host, int port);
其中host为待连接的服务器地址,port为端口号。例如:
Socket socket = new Socket("127.0.0.1", 8888);
2. 读写数据
连接建立后,可以通过获取Socket的输入输出流进行数据的读写操作。
当需要向服务器发送数据时,可以通过输出流将数据发送出去:
OutputStream out = socket.getOutputStream();
DataOutputStream dout = new DataOutputStream(out);
dout.writeBytes("Hello Server!");
当需要从服务器接收数据时,可以通过输入流接收数据:
InputStream in = socket.getInputStream();
DataInputStream din = new DataInputStream(in);
String message = din.readUTF();
3. 断开连接
当数据传输完毕后,需要断开连接,可以通过以下方式断开连接:
socket.close();
ServerSocket
1. 创建ServerSocket
可以通过如下方式创建ServerSocket:
ServerSocket serverSocket = new ServerSocket(int port);
其中port为服务端监听的端口号。
2. 监听和接收连接请求
通过如下方式进行监听和接收客户端连接请求:
Socket sock = serverSocket.accept();
在有客户端请求连接后,accept()
方法将返回一个Socket连接对象,用于服务端和客户端的通信。
3. 读写数据
服务端接收客户端的数据和向客户端发送数据的方式与客户端向服务端发送数据和接收数据的方式相同。
4. 断开连接
当服务端需要断开与客户端的连接时,可以通过以下方式断开连接:
sock.close();
示例1:客户端向服务器发送数据
客户端代码:
import java.io.*;
import java.net.*;
public class TcpClient {
public static void main(String[] args) throws Exception {
Socket socket = new Socket("localhost", 8888);
OutputStream out = socket.getOutputStream();
DataOutputStream dout = new DataOutputStream(out);
dout.writeUTF("Hello Server!");
out.close();
dout.close();
socket.close();
}
}
服务端代码:
import java.io.*;
import java.net.*;
public class TcpServer {
public static void main(String[] args) throws Exception {
ServerSocket serverSocket = new ServerSocket(8888);
Socket sock = serverSocket.accept();
InputStream is = sock.getInputStream();
DataInputStream dis = new DataInputStream(is);
String message = dis.readUTF();
System.out.println("Received message: " + message);
dis.close();
is.close();
sock.close();
}
}
以上代码实现了客户端向服务器发送一段字符串,并且输出了服务端接收到的字符串。
示例2:服务器向客户端发送数据
客户端代码:
import java.io.*;
import java.net.*;
public class TcpClient {
public static void main(String[] args) throws Exception {
Socket socket = new Socket("localhost", 8888);
InputStream in = socket.getInputStream();
DataInputStream din = new DataInputStream(in);
String message = din.readUTF();
System.out.println("Received message: " + message);
in.close();
din.close();
socket.close();
}
}
服务端代码:
import java.io.*;
import java.net.*;
public class TcpServer {
public static void main(String[] args) throws Exception {
ServerSocket serverSocket = new ServerSocket(8888);
Socket sock = serverSocket.accept();
OutputStream out = sock.getOutputStream();
DataOutputStream dout = new DataOutputStream(out);
dout.writeUTF("Hello Client!");
out.close();
dout.close();
sock.close();
}
}
以上代码实现了服务端向客户端发送一段字符串,并且输出了客户端接收到的字符串。
结论
通过本文的介绍,我们了解了Java中Socket的用法,包括客户端和服务端的数据传输和连接的建立与断开。在实际的开发中,Socket在网络通信中应用广泛,掌握Socket编程基础是十分必要的。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java中Socket用法详解 - Python技术站