将Socket转换为String,反之亦然

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

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

 String strss = ss.tostring(); 

然后

 Socket s = new Socket(strss); 

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

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

要字符串:

 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); 

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

这是不可能的。

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

除了简单的摘要外,您无法将套接字转换为字符串。 相反,您应该通过套接字发送数据。

 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(); } 

输出缓冲留给读者练习。

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

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

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

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

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

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

例如,要获取主机地址

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

然后重新创建套接字:

 Socket s = new Socket(strss, KNOWN_PORT);