2014-11-08 91 views
-1

我已經建立了使用閱讀/寫作

String hostName = ...; 
int portNumber = ...; 
SocketAddress addr = new InetSocketAddress(hostName, portNumber); 
Socket clientSocket = new Socket(); 
clientSocket.connect(addr, 100); 

,但現在我想將消息發送到服務器,在該服務器的TCP連接。
我該怎麼做,使用InputStreams

+0

你不知道。你可以用'OutputStreams'和它的'write()'方法實現它。 – EJP 2017-02-24 00:18:49

回答

0

有實現這一目標的不同方式。與套接字進行的大部分通信都是通過它們的In/OutputStreams。將消息發送到所述插座的簡單方法將是:

OutputStream output = clientSocket.getOutputStream(); 
output.write(Charset.getDefaultCharset().encode("Hello, world!")); 

的Charset.getDefaultCharset()編碼(字符串)是一個字符串轉換成一個字節數組,因爲它是不可能發送的任何其他數據。比插槽上的字節容易(查找「序列化」)

+0

實際上有簡單的方法來讀取或寫入字節數組以外的其他東西。所有人要做的就是裝飾溪流。 – 2014-11-08 18:21:04

+0

嗯,我想那是真的;)但是在開發你自己的協議的樂趣在哪裏呢; P – Gelx 2014-11-08 18:27:39

+0

我會說不要將數據傳輸機制與協議混合在一起。但我真的不明白你的意思。 – 2014-11-08 18:30:20

1

檢索SocketgetInputStreamgetOutputStream的輸入流和輸出流。從此,你需要使用的輸出流(而不是輸入流)將消息發送到服務器:

Socket clientSocket = new Socket(); 
clientSocket.connect(addr, 100); 
InputStream istream = clientSocket.getInputStream(); 
OutputStream ostream = clientSocket.getOutputStream(); 
... // write the message to ostream 
... // read the server's reply from istream (if applicable) 

您可能想裝飾這些流成其他類型,以方便你的工作爲好,如InputStreamOutputStream在操作上是非常原始的。舉例來說,如果你想要寫一個短信,你可以使用PrintWriter

PrintWriter writer = new PrintWriter(ostream); 
writer.print("My number: "); 
writer.println(5); 
writer.print("My name: "); 
writer.println("John Doe"); 
writer.println("Done"); 
writer.flush();