2014-11-08 87 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();