Java 将套接字转换为字符串,反之亦然

Java 将套接字转换为字符串,反之亦然,java,android,sockets,Java,Android,Sockets,我是Android的socket编程(Java)。如何将套接字转换为字符串并将该字符串表示形式转换回套接字 例如,考虑 Socket SS。我想要的是这样的东西: String strss = ss.tostring(); 后来 Socket s = new Socket(strss); 我想将套接字(即稍后重新创建该套接字所需的详细信息)保存到数据库中(作为字符串),然后我需要将其重新转换为套接字,以便在我的应用程序中使用它 不能将套接字转换为字符串,除非作为简单摘要。相反,您应该通过套接

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

例如,考虑<代码> Socket SS。我想要的是这样的东西:

String strss = ss.tostring();
后来

Socket s = new Socket(strss);

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

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

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();
}
输出缓冲留给读者作为练习


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

这是不可能的


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

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

要设置字符串,请执行以下操作:

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 s = new Socket(strss, KNOWN_PORT);

通过将套接字转换为字符串,您希望实现什么。这似乎不合逻辑。套接字可用于创建和维护与另一个套接字或计算机的连接。它不是
字符串
。您通常用于套接字的字符串是主机,因此您可以使用例如
getInetAddress().getHostName()
并使用该字符串设置另一个
socket
我想将套接字保存到数据库中(作为字符串),然后我需要将其重新转换为socket以在我的应用程序中使用它!在堆栈交换中,最好使用所需的信息编辑您的问题,这样评论在其观点得到解决后就可以整理(删除)。令人失望的是,这里的大多数答案似乎对批评问题和提出一些聪明的观点比对回答基本问题更感兴趣。我认为pooyan想做什么是很清楚的,仅仅因为pooyan不知道该要求什么或表达什么,并不给任何人粗鲁或评判的借口。记住,伙计们,我想你们没有达到我的目标。我现在知道如何使用socket读写,但我想将socket保存为字符串,然后当我需要它时,我想将其重新转换为socket并在我的应用程序中使用!!!你没有清楚地解释你的目标。如果要序列化,请不要序列化套接字。我正在考虑这个解决方案,但我希望是否有更好的方法。
Socket s = new Socket(strss, KNOWN_PORT);