Java 通信,服务端开启端口监听客户端请求,客户端发送地区号,服务端将地区名称返回到客户端
时间: 2023-10-08 07:05:50 浏览: 50
好的,这里提供一个简单的 Java Socket 通信示例,实现客户端向服务端发送地区号,服务端返回地区名称的功能。
服务端代码:
```java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.HashMap;
import java.util.Map;
public class Server {
private static final int PORT = 8888; // 服务端监听端口号
private static final Map<String, String> AREA_MAP = new HashMap<>(); // 地区号和名称的映射表
static {
AREA_MAP.put("010", "北京市");
AREA_MAP.put("021", "上海市");
AREA_MAP.put("0755", "深圳市");
}
public static void main(String[] args) throws IOException {
ServerSocket serverSocket = new ServerSocket(PORT);
System.out.println("服务器已启动,等待客户端连接...");
while (true) {
Socket socket = serverSocket.accept();
new Thread(() -> {
try {
handleConnection(socket);
} catch (IOException e) {
e.printStackTrace();
}
}).start();
}
}
private static void handleConnection(Socket socket) throws IOException {
System.out.println("客户端已连接:" + socket.getInetAddress() + ":" + socket.getPort());
InputStream is = socket.getInputStream();
OutputStream os = socket.getOutputStream();
byte[] buffer = new byte[1024];
int len;
while ((len = is.read(buffer)) != -1) {
String areaCode = new String(buffer, 0, len);
String areaName = AREA_MAP.getOrDefault(areaCode, "未知地区");
os.write(areaName.getBytes());
os.flush();
}
socket.shutdownOutput();
System.out.println("客户端已断开:" + socket.getInetAddress() + ":" + socket.getPort());
is.close();
os.close();
socket.close();
}
}
```
客户端代码:
```java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.util.Scanner;
public class Client {
private static final String SERVER_IP = "localhost"; // 服务端 IP 地址
private static final int SERVER_PORT = 8888; // 服务端监听端口号
public static void main(String[] args) throws IOException {
Socket socket = new Socket(SERVER_IP, SERVER_PORT);
System.out.println("连接服务器成功!");
InputStream is = socket.getInputStream();
OutputStream os = socket.getOutputStream();
Scanner scanner = new Scanner(System.in);
while (true) {
System.out.print("请输入地区号:");
String areaCode = scanner.nextLine();
if ("exit".equalsIgnoreCase(areaCode)) {
break;
}
os.write(areaCode.getBytes());
os.flush();
byte[] buffer = new byte[1024];
int len = is.read(buffer);
String areaName = new String(buffer, 0, len);
System.out.println("地区名称:" + areaName);
}
is.close();
os.close();
socket.close();
}
}
```
以上示例中,服务端启动后监听指定端口,等待客户端连接。客户端连接后,向服务端发送地区号,服务端根据地区号查询对应的地区名称,并将地区名称返回给客户端。客户端接收到地区名称后进行输出,当用户输入 "exit" 时退出程序。