繁体   English   中英

将Socket转换为String,反之亦然

[英]Convert Socket to String and vice versa

我正在为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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM