如何在TCP套接字连接会话中保存数据?

时间:2010-10-18 05:41:10

标签: java sockets tcp

我想在java中编写服务器代码,它将接受来自许多设备的信息并将信息存储在数据库中。设备将继续发送数据包。第一个数据包将包含唯一的deviceId,之后只包含与设备相关的数据。我想与deviceId一起保存数据。 到目前为止,我可以开发一个可以为许多客户端服务的多线程服务器。但是当我获取数据时,我要么丢失deviceId,要么得到错误的deviceId。 有人可以帮忙吗?

提前致谢。

3 个答案:

答案 0 :(得分:0)

Java不是我最好的编码领域,但我希望这些想法会有所帮助。

可以使用hibernate或其他一些OR-Mappe完成数据库访问,因此您可以像对象一样操作数据库。 对于数据包中的信息,您可以在成功连接到服务器时发送信息,如:

public void connect(string servername)
{
  ConnectionMethod();
  if(connected)
  {
    SendObject(/*Enter information here*/);
  }
}

然后在接收线程中,您可以检查传入消息的某个类并相应地处理它,就像将其存储在数据库中或类似的东西。 对于错误的设备ID,您必须在获取数据包时检查您是否在正确的线程中

答案 1 :(得分:0)

如果要开发无状态协议,则必须向每个设备发送ID,例如HTTP会话,并且设备必须与服务器给出的SessionID连接。

答案 2 :(得分:0)

如果使用单线程每连接模式,则可以将deviceId保存为线程对象的字段,并将其传递给它调用的每个方法,或者可以将deviceid存储在ThreadLocal中: / p>

private static ThreadLocal<String> deviceId = new ThreadLocal<String>();

public static String getDeviceId() {
    return deviceId.get();
}

public static void setDeviceId(String newValue) {
    deviceId.set(newValue);
}