我是Android的套接字编程(Java)。如何将我的套接字转换为字符串并将该字符串表示转换回套接字?
例如,考虑Socket ss
。我想要的是这样的事情:
String strss = ss.tostring();
以后
Socket s = new Socket(strss);
我想将Socket(即稍后重新创建该套接字所需的详细信息)保存到数据库中(作为字符串),之后我需要将其重新转换为Socket以在我的应用程序中使用它!
答案 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);