如何使用getOutputStream方法发送strin.它只能发送他们提到的字节.到目前为止,我可以发送一个字节.但不是字符串值.
public void sendToPort() throws IOException {
Socket socket = null;
try {
socket = new Socket("ip address", 4014);
socket.getOutputStream().write(2); // have to insert the string
} catch (UnknownHostException e) {
System.err.print(e);
} finally {
socket.close();
}
}
Run Code Online (Sandbox Code Playgroud)
提前致谢
Jos*_*hin 15
使用OutputStreamWriter类来实现您想要的
public void sendToPort() throws IOException {
Socket socket = null;
OutputStreamWriter osw;
String str = "Hello World";
try {
socket = new Socket("ip address", 4014);
osw =new OutputStreamWriter(socket.getOutputStream(), "UTF-8");
osw.write(str, 0, str.length());
} catch (IOException e) {
System.err.print(e);
} catch (UnknownHostException e) {
System.err.print(e);
} finally {
socket.close();
}
}
Run Code Online (Sandbox Code Playgroud)
Jun*_*san 11
如何使用PrintWriter:
OutputStream outstream = socket .getOutputStream();
PrintWriter out = new PrintWriter(outstream);
String toSend = "String to send";
out.print(toSend );
Run Code Online (Sandbox Code Playgroud)
编辑:找到我自己的答案,看到一个改进被讨论但被遗漏.这是使用OutputStreamWriter编写字符串的更好方法:
// Use encoding of your choice
Writer out = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream(fileDir), "UTF8"));
// append and flush in logical chunks
out.append(toSend).append("\n");
out.append("appending more before flushing").append("\n");
out.flush();
Run Code Online (Sandbox Code Playgroud)
两种选择:
OutputStream在一个OutputStreamWriter,这样你就可以发送字符串String.getBytes(encoding)请注意,在这两种情况下,您都应该明确指定编码,例如“UTF-8” - 避免仅使用平台默认编码(这几乎总是一个坏主意)。
这只会发送字符数据本身 - 如果您需要发送多个字符串,而另一端需要知道每个字符串的开始和结束位置,您将需要一个更复杂的协议。如果两端都是 Java,则可以使用DataInputStreamand DataOutputStream; 否则您可能想提出自己的协议(假设它尚未修复)。