我在套接字上编写客户机-服务器应用程序,我有任务设计我自己的协议。客户端和服务器与XML通信。我使用JAXB库。客户机将XML完美地写入输出流。但我无法在服务器上读取它。你能演示一下如何正确接收客户端的数据吗?
public class Client {
public static final String SERVER_HOST = "localhost";
public static final Integer SERVER_PORT = 4444;
public static final Logger LOG = Logger.getLogger(Client.class);
public static void main(String[] args) throws IOException {
System.out.println("Welcome to Client side");
XMLProtocol protocol = new XMLProtocol();
Socket fromserver = null;
fromserver = new Socket(SERVER_HOST, SERVER_PORT);
BufferedReader in = new BufferedReader(new InputStreamReader(fromserver.getInputStream()));
PrintWriter out = new PrintWriter(fromserver.getOutputStream(), true);
BufferedReader inu = new BufferedReader(new InputStreamReader(System.in));
String fuser, fserver;
while ((fuser = inu.readLine()) != null) {
protocol.setComId((long) 0);
protocol.setContent("Client content");
protocol.setLogin("User");
try {
JAXBContext jaxbContext = JAXBContext.newInstance(XMLProtocol.class);
Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
jaxbMarshaller.marshal(protocol, out);
} catch (JAXBException e) {
LOG.error("Error while processing protocol"+e);
}
fserver = in.readLine();
System.out.println(fserver);
if (fuser.equalsIgnoreCase("close"))
break;
if (fuser.equalsIgnoreCase("exit"))
break;
}
out.close();
in.close();
inu.close();
fromserver.close();
}
}
package dataart.practice.server;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import org.apache.log4j.Logger;
public class Server {
public static final Logger LOG = Logger.getLogger(Server.class);
public static final String SERVER_HOST = "localhost";
public static final Integer SERVER_PORT = 4444;
public static Integer userCount = 0;
public static void main(String[] args) throws IOException {
LOG.trace("Server started");
ServerSocket s = new ServerSocket(SERVER_PORT);
try {
while (true) {
LOG.trace("Waiting for connections...");
Socket socket = s.accept();
try {
new ServerThread(socket);
LOG.trace("Users in the chat: "+(userCount+1));
userCount++;
} catch (IOException e) {
socket.close();
}
}
} finally {
s.close();
}
}
}
还有我的线。
public class ServerThread extends Thread {
private static final Logger LOG = Logger.getLogger(ServerThread.class);
private Socket socket;
private BufferedReader in;
private PrintWriter out;
private String buffer;
public ServerThread(Socket s) throws IOException {
socket = s;
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);
start();
}
public void run() {
try {
while (true) {
// if ((buffer = in.readLine()).endsWith("</xmlProtocol>")) {
JAXBContext jaxbContext = JAXBContext.newInstance(XMLProtocol.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
sXMLProtocol protocol = (XMLProtocol) jaxbUnmarshaller.unmarshal(in);
LOG.trace("Getting message from user" + protocol.getContent());
}
LOG.trace("Nop");
}
} catch (JAXBException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
socket.close();
LOG.trace("Socket closed");
} catch (IOException e) {
LOG.error("Socket no closed" + e);
}
}
}
}
我应该在服务器上写什么来解析我得到的XML?我尝试解析InputStream。
编辑我的问题:
现在它显示我异常。我改变马歇尔参数。
你试过调试线路吗
(buffer = in.readLine()).endsWith("</xmlProtocol>")
也许它的结果是假的
我想在一些计算机之间建立点对点连接,这样用户就可以在没有外部服务器的情况下聊天和交换文件。我最初的想法如下: 我在服务器上制作了一个中央服务器插座,所有应用程序都可以连接到该插座。此ServerSocket跟踪已连接的套接字(客户端),并将新连接的客户端的IP和端口提供给所有其他客户端。每个客户端都会创建一个新的ServerSocket,所有客户端都可以连接到它。 换句话说:每个客户端都有一个Se
我使用的是hazelcast v3。2.4客户-
我有一个客户端服务器的情况,每一方都在测量时间,但似乎有一个问题,即测量的时间不匹配。长话短说,这个想法是有一个倒计时,之后程序需要做事情。我在服务器端测量这个。但是,倒计时需要显示,所以我所做的是在客户端单独运行它。最终结果是,当服务器发送消息时,客户端显示为23秒,该消息表明时间倒计时为10分钟。 客户端为XNA,代码: 然后从可用时间中减去计时器,并显示出来。在服务器端,这种情况正在发生:
前面的章节介绍了所有 Redis 的重要功能组件: 数据结构、数据类型、事务、Lua 环境、事件处理、数据库、持久化, 等等, 但是我们还没有对 Redis 服务器本身做任何介绍。 不过, 服务器本身并没有多少需要介绍的新东西, 因为服务器除了维持服务器状态之外, 最重要的就是将前面介绍过的各个功能模块组合起来, 而这些功能模块在前面的章节里已经介绍过了, 所以本章将焦点放在服务器的初始化过程,
客户端设计 客户端设计是CAT系统设计中最为核心的一个环节,客户端要求是做到API简单、高可靠性能、无论在任何场景下客户端都不能影响各业务服务的性能(监控只是公司核心业务流程一个旁路环节)。以下客户端设计以及细节均以java客户端为例子。 设计架构 CAT客户端是java,客户端在收集端数据方面使用ThreadLocal,是线程本地变量,也可以称之为线程本地存储。线程局部变量(ThreadLoca
[服务器]: