java - 发送数据包 header 和主体

标签 java sockets

目前,我的服务器和客户端使用如下所示的请求字符串进行通信:

[...]
this.outputStream = new PrintWriter(this.socket.getOutputStream(), true);
    this.inputStream = new BufferedReader(new 
InputStreamReader(this.socket.getInputStream()));
[...]

连接到Server的Socket表示socket,它来自Server Socket的openConnection()。我通过一种方法使用套接字发送客户端请求字符串:

public void sendRequest(String requestString) {
    this.outputStream.println(requestString);
}

这样做的限制是我的服务器和客户端永远不知道正在发送什么类型的请求,我设法稍微确定正在发送的内容的唯一方法是在数据之前发送事件值,例如所以:

公共(public)最终静态 int 默认 = 1; 公共(public)最终静态 int LOGIN = 2; 等等...

因此,Socket 包含客户端当前所在位置的 ID,以便服务器知道下一组信息与服务器操作“登录”相对应。

有没有一种方法可以通过套接字发送数据包,其中 header 可以是 2,数据可以是用户名和密码?

我很感激所有的帮助,我通过套接字查看了对象,但似乎您需要知道传入对象的类型。

最佳答案

这取决于如何设计服务器和客户端之间的应用程序级协议(protocol)。例如,一旦打开套接字,您可以从客户端写入一个字符串,该字符串看起来像“LOGIN\n”,然后是序列化对象。从服务器端,您可以读取它直到行尾字符,然后解释“LOGIN”字符串,然后读取对象。

您还可以按照上面的建议使用 JSON。

但是,无论您决定如何,都必须首先在客户端和服务器之间定义并建立应用程序级协议(protocol)。

关于java - 发送数据包 header 和主体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46109813/

相关文章:

java - 我如何在 Servlet 和 JSP 中使用 JUnit?

java - 如何安排任务运行一次?

java.lang.ClassNotFoundException : org. bouncycaSTLe.asn1.ASN1Encodable 与 itextpdf-5.5.6

java - 我如何将 Google Maps V2 显示到自定义对话框 android

java - Android 套接字连接被拒绝

c - 与C网络编程中的套接字相关的问题

c - 如何在 Linux 的 udp 中使用 select api

可以通过本地主机连接到我的程序,但无法使用网络上的其他计算机进行连接

c - 在 if 语句 poll() block 中,每个请求触发函数多次

java - 计算元音的数量并以元音较多的字符串在前的方式打印它们