2013-06-28 119 views
2

我是Android的套接字編程(Java)。如何將套接字轉換爲字符串並將該字符串表示形式轉換回套接字?例如,考慮Socket ss。我要的是一些這樣的事:將套接字轉換爲字符串,反之亦然

String strss = ss.tostring(); 

後來

Socket s = new Socket(strss); 

我要保存的插座(即後來重新創建插座所需的詳細信息)到數據庫(作爲字符串)之後我需要重新將其轉換爲Socket以便在我的應用程序中使用它!

+1

你這是什麼wnat通過轉換插座字符串來實現。這似乎不合邏輯。 –

+0

套接字可用於創建和維護與另一個套接字或機器的連接。它不是'String'。您通常使用套接字的字符串是主機,因此您可以使用例如'getInetAddress()。getHostName()'並使用它來設置另一個'Socket' –

+1

我想將Socket保存到數據庫(作爲字符串),之後我需要將它重新轉換到Socket以在我的應用程序中使用它! – pooyan

回答

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

輸出緩衝留給練習讀者。

+1

我認爲你沒有得到我的目標。我現在如何讀寫套接字,但我想將套接字保存爲字符串,之後當我需要它時,我想將它重新轉換爲套接字並在我的應用程序中使用它! – pooyan

+1

你沒有*清楚地解釋你的目標。如果你想序列化,*不要*序列化一個套接字。 – hexafraction

2

我要救插座到數據庫(如字符串)

那是不可能的。

歡迎您將用於打開套接字的主機和端口保存到數據庫。

+0

我在想這個解決方案,但我希望是否有更好的方法。 – pooyan

5

奇怪的問題,但您可以提取您需要從字符串重新創建套接字的信息。 沒有錯誤檢查等:

爲String:

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

不能套接字保存到數據庫中。這沒有任何意義。

+0

@downvoter不要告訴我你相信它*有道理嗎? – EJP

0

以後要重新創建一個插座,你只需要主機地址端口號

  • 如果每個現有的插座都有不同主機地址端口號那麼你將需要兩個存儲在數據庫中:

    • 如果你不知道存儲選擇所有數據在單個字符串中,那麼您需要在該字符串中編碼主機地址和端口號,在way suggested by Mattias或類似的地方。

    • 這將是更好不過,存儲主機地址並分別在數據庫中端口號,這樣你不必創建和後來解析字符串更加複雜。

  • 如果您的插座始終打開相同的端口但是,你可以只保存主機地址在數據庫中。

例如,爲了獲得主機地址

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

然後重新插座:

Socket s = new Socket(strss, KNOWN_PORT); 
相關問題