温馨提示:这篇文章已超过239天没有更新,请注意相关的内容是否还可用!
Java Socket是一种用于在网络上进行通信的技术。使用Java Socket可以实现客户端和服务器之间的双向通信。在聊天应用中,可以使用Java Socket来实现消息的发送和接收。
我们需要创建一个服务器端和一个客户端。服务器端负责接收客户端发送的消息,并将其转发给其他客户端。客户端负责发送消息给服务器端,并接收服务器端转发的消息。
下面是一个简单的示例代码,演示了如何使用Java Socket发送消息:
服务器端代码示例:
import java.io.IOException;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Server {
private static List<PrintWriter> clients = new ArrayList<>();
public static void main(String[] args) {
try {
ServerSocket serverSocket = new ServerSocket(12345);
System.out.println("服务器已启动,等待客户端连接...");
while (true) {
Socket clientSocket = serverSocket.accept();
System.out.println("客户端连接成功:" + clientSocket);
PrintWriter writer = new PrintWriter(clientSocket.getOutputStream(), true);
clients.add(writer);
Thread thread = new Thread(new ClientHandler(clientSocket, writer));
thread.start();
}
} catch (IOException e) {
e.printStackTrace();
}
}
private static class ClientHandler implements Runnable {
private Socket clientSocket;
private PrintWriter writer;
public ClientHandler(Socket clientSocket, PrintWriter writer) {
this.clientSocket = clientSocket;
this.writer = writer;
}
@Override
public void run() {
try {
Scanner scanner = new Scanner(clientSocket.getInputStream());
while (scanner.hasNextLine()) {
String message = scanner.nextLine();
System.out.println("收到消息:" + message);
for (PrintWriter client : clients) {
client.println(message);
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
客户端代码示例:
import java.io.IOException;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;
public class Client {
public static void main(String[] args) {
try {
Socket socket = new Socket("localhost", 12345);
System.out.println("连接服务器成功:" + socket);
PrintWriter writer = new PrintWriter(socket.getOutputStream(), true);
Thread thread = new Thread(new ServerHandler(socket));
thread.start();
Scanner scanner = new Scanner(System.in);
while (true) {
String message = scanner.nextLine();
writer.println(message);
}
} catch (IOException e) {
e.printStackTrace();
}
}
private static class ServerHandler implements Runnable {
private Socket socket;
public ServerHandler(Socket socket) {
this.socket = socket;
}
@Override
public void run() {
try {
Scanner scanner = new Scanner(socket.getInputStream());
while (scanner.hasNextLine()) {
String message = scanner.nextLine();
System.out.println("收到消息:" + message);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
以上代码演示了一个简单的聊天应用,服务器端通过监听指定的端口接收客户端的连接,并将客户端发送的消息转发给其他客户端。客户端通过指定服务器的地址和端口连接到服务器,并发送消息给服务器。
运行以上代码,可以在控制台上输入消息并发送给其他客户端,同时也可以接收其他客户端发送的消息。这样就实现了简单的Java Socket聊天功能。