2

我是 Android 的套接字编程(在 Java 中)。如何将我的套接字转换为字符串并将该字符串表示形式转换回套接字?

例如,考虑一个Socket ss. 我想要的是这样的东西:

String strss = ss.tostring();

然后

Socket s = new Socket(strss);

我想将 Socket(即稍后重新创建该套接字所需的详细信息)保存到数据库中(作为字符串),然后我需要将其重新转换为 Socket 以在我的应用程序中使用它!

4

5 回答 5

5

奇怪的问题,但您可以从字符串中提取重新创建套接字所需的信息。没有错误检查等:

要字符串:

Socket s = ...;
String hostAndPort = s.getInetAddress().getHostAddress();
hostAndPort = hostAndPort + ":" + s.getPort();

然后返回:

String host = hostAndPort.substring(0, hostAndPort.indexOf(':'));
int port = Integer.parseInt(hostAndPort.substring(hostAndPort.indexOf(':') + 1));
Socket s = new Socket(host, port);
于 2013-06-28T00:47:42.123 回答
2

我想将 Socket 保存到数据库中(作为字符串)

这是不可能的。

欢迎您将用于打开套接字的主机和端口保存到数据库。

于 2013-06-28T00:47:11.580 回答
0

稍后要重新创建套接字,您只需要主机地址端口号

  • 如果每个现有套接字都有不同的主机地址端口号,那么您需要将两者都存储在数据库中:

    • 如果您无法选择将所有数据存储在单个字符串中,那么您将需要按照Mattias或类似建议的方式在该字符串中编码主机地址和端口号。

    • 不过,最好将主机地址端口号分别存储在数据库中,这样您就不会增加以后创建和解析字符串的复杂性。

  • 但是,如果您的套接字始终打开到同一个端口,您可以将主机地址保存在数据库中。

例如,要获取主机地址

String strss = ss.getInetAddress().getHostAddress();

然后重新创建套接字:

Socket s = new Socket(strss, KNOWN_PORT);
于 2013-07-01T23:09:00.390 回答
0

您不能将套接字转换为字符串,除非作为一个简单的摘要。相反,您应该通过套接字发送数据。

try{
Socket ss=new Socket();
BufferedReader in=new BufferedReader(new InputStreamReader(ss.getInputStream()));
PrintWriter out=PrintWriter(ss.getOutputStream()));
String line=in.readLine(); //reads a line, repeat as necessary
out.println("foo"); //Writes a line
} catch (IOException e){
     e.printStackTrace();
}

输出缓冲留给读者作为练习。

于 2013-06-28T00:30:34.847 回答
0

您不能将套接字保存到数据库中。这没有任何意义。

于 2013-06-28T02:02:46.963 回答