java xml使用socket TCP协议编写服务端与客户端,客户端输入城市ID,服务器响应相应城市信息
时间: 2024-04-15 07:28:38 浏览: 168
你可以使用Java的Socket和TCP协议来编写一个基于客户端-服务器模型的应用程序。下面是一个简单的示例代码,演示了如何使用XML作为数据交换格式来实现你的需求。
首先是服务端的代码,它会监听指定的端口,并根据客户端发送的城市ID来返回相应的城市信息:
```java
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import org.w3c.dom.*;
import javax.xml.parsers.*;
import javax.xml.transform.*;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
public class Server {
public static void main(String[] args) {
try {
ServerSocket serverSocket = new ServerSocket(12345); // 指定监听的端口号
System.out.println("服务器已启动,等待客户端连接...");
while (true) {
Socket socket = serverSocket.accept(); // 等待客户端连接
System.out.println("客户端已连接");
BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String cityId = reader.readLine(); // 读取客户端发送的城市ID
// 根据城市ID查询城市信息(这里仅作示例,实际情况需要根据具体需求进行处理)
String cityInfo = queryCityInfo(cityId);
// 构造XML响应数据
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.newDocument();
Element rootElement = doc.createElement("city");
doc.appendChild(rootElement);
Element idElement = doc.createElement("id");
idElement.setTextContent(cityId);
rootElement.appendChild(idElement);
Element infoElement = doc.createElement("info");
infoElement.setTextContent(cityInfo);
rootElement.appendChild(infoElement);
// 将XML响应数据发送给客户端
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
DOMSource source = new DOMSource(doc);
StringWriter writer = new StringWriter();
transformer.transform(source, new StreamResult(writer));
String responseXml = writer.getBuffer().toString();
PrintWriter writer = new PrintWriter(socket.getOutputStream(), true);
writer.println(responseXml);
socket.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
private static String queryCityInfo(String cityId) {
// 根据城市ID查询城市信息的具体实现
// 这里仅作示例,实际情况需要根据具体需求进行处理
if (cityId.equals("1")) {
return "北京";
} else if (cityId.equals("2")) {
return "上海";
} else if (cityId.equals("3")) {
return "广州";
} else {
return "城市信息未找到";
}
}
}
```
接下来是客户端的代码,它会向服务端发送城市ID,并接收服务端返回的城市信息:
```java
import java.io.*;
import java.net.Socket;
public class Client {
public static void main(String[] args) {
try {
Socket socket = new Socket("localhost", 12345); // 指定服务端的IP地址和端口号
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
PrintWriter writer = new PrintWriter(socket.getOutputStream(), true);
System.out.print("请输入城市ID:");
String cityId = reader.readLine();
writer.println(cityId); // 发送城市ID给服务端
BufferedReader responseReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String cityInfo = responseReader.readLine(); // 接收服务端返回的城市信息
System.out.println("服务端返回的城市信息:");
System.out.println(cityInfo);
socket.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
```
这只是一个简单的示例,你可以根据实际需求进行修改和扩展。同时需要注意的是,这里的数据交换使用了简单的文本协议和XML格式,实际情况中你可能需要更复杂的协议和数据格式。另外,对于真实的应用程序,你还需要处理异常、关闭资源等情况。
阅读全文