引言
在互联网时代,网络编程已经成为计算机科学领域的重要分支。Java作为一种跨平台、面向对象的编程语言,在网络编程领域有着广泛的应用。Socket编程是Java网络编程的核心技术之一,掌握Socket编程对于构建高效的网络应用至关重要。本文将带你轻松入门Socket编程,并通过实战案例帮助你更好地理解和应用这一技术。
一、Socket编程基础
1.1 什么是Socket
Socket,即“套接字”,是网络通信中的一种抽象层。它允许运行在不同主机上的程序之间建立通信连接。在Java中,Socket编程通过Java Socket API实现。
1.2 Socket通信模式
Socket通信主要分为两种模式:
- 客户端-服务器模式(C/S模式):客户端主动连接服务器,请求服务。
- 服务器-客户端模式(S/C模式):服务器主动连接客户端,推送数据。
1.3 Java Socket API
Java Socket API提供了以下类:
- Socket:表示客户端或服务器端的连接。
- ServerSocket:表示服务器端的监听套接字。
- InputStream和OutputStream:用于读写数据。
二、Socket编程实战
2.1 实战一:C/S模式——文件传输
2.1.1 客户端代码
import java.io.*;
import java.net.*;
public class FileClient {
public static void main(String[] args) throws IOException {
String serverIP = "127.0.0.1"; // 服务器IP地址
int port = 12345; // 服务器端口号
Socket socket = new Socket(serverIP, port);
// 发送文件
FileInputStream fis = new FileInputStream("example.txt");
OutputStream os = socket.getOutputStream();
byte[] buffer = new byte[1024];
int len;
while ((len = fis.read(buffer)) != -1) {
os.write(buffer, 0, len);
}
fis.close();
os.close();
socket.close();
}
}
2.1.2 服务器端代码
import java.io.*;
import java.net.*;
public class FileServer {
public static void main(String[] args) throws IOException {
int port = 12345; // 服务器端口号
ServerSocket serverSocket = new ServerSocket(port);
Socket socket = serverSocket.accept();
System.out.println("Client connected!");
// 接收文件
InputStream is = socket.getInputStream();
FileOutputStream fos = new FileOutputStream("received.txt");
byte[] buffer = new byte[1024];
int len;
while ((len = is.read(buffer)) != -1) {
fos.write(buffer, 0, len);
}
is.close();
fos.close();
socket.close();
serverSocket.close();
}
}
2.2 实战二:S/C模式——在线聊天
2.2.1 服务器端代码
import java.io.*;
import java.net.*;
public class ChatServer {
public static void main(String[] args) throws IOException {
int port = 12345; // 服务器端口号
ServerSocket serverSocket = new ServerSocket(port);
System.out.println("Waiting for client...");
Socket socket = serverSocket.accept();
System.out.println("Client connected!");
BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter writer = new PrintWriter(socket.getOutputStream(), true);
String inputLine;
while ((inputLine = reader.readLine()) != null) {
System.out.println("Client: " + inputLine);
writer.println("Server: " + inputLine);
}
reader.close();
writer.close();
socket.close();
serverSocket.close();
}
}
2.2.2 客户端代码
import java.io.*;
import java.net.*;
public class ChatClient {
public static void main(String[] args) throws IOException {
String serverIP = "127.0.0.1"; // 服务器IP地址
int port = 12345; // 服务器端口号
Socket socket = new Socket(serverIP, port);
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
PrintWriter writer = new PrintWriter(socket.getOutputStream(), true);
String inputLine;
while ((inputLine = reader.readLine()) != null) {
writer.println(inputLine);
}
BufferedReader serverReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
while ((inputLine = serverReader.readLine()) != null) {
System.out.println("Server: " + inputLine);
}
reader.close();
writer.close();
serverReader.close();
socket.close();
}
}
三、总结
通过本文的学习,相信你已经对Java Socket编程有了初步的了解。在实际应用中,Socket编程可以应用于各种网络应用,如文件传输、在线聊天、远程控制等。希望本文能帮助你轻松入门Socket编程,为你的网络应用开发之路奠定基础。
