将Socket转换为String,反之亦然

时间:2013-06-28 00:24:30

标签: java android sockets

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

例如,考虑Socket ss。我想要的是这样的事情:

String strss = ss.tostring();

以后

Socket s = new Socket(strss);

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

5 个答案:

答案 0 :(得分: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);

答案 1 :(得分:2)

  

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

这是不可能的。

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

答案 2 :(得分: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();
}

输出缓冲留给读者练习。

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

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

    • 如果您无法选择将所有数据存储在单个字符串中,那么您需要在way suggested by Mattias或类似字符串中对该字符串中的主机地址和端口号进行编码。

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

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

例如,要获取主机地址

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

然后重新创建套接字:

Socket s = new Socket(strss, KNOWN_PORT);