如何使用getInputStream方法发送字符串。它只能发送他们提到的字节。到目前为止,我可以发送一个字节。但不是字符串值。
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();
}
}
提前致谢
答案 0 :(得分:14)
使用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();
}
}
答案 1 :(得分:11)
如何使用PrintWriter:
OutputStream outstream = socket .getOutputStream();
PrintWriter out = new PrintWriter(outstream);
String toSend = "String to send";
out.print(toSend );
编辑:找到了我自己的答案,看到了一个改进被讨论但被遗漏了。这是使用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();
答案 2 :(得分:4)
两个选项:
OutputStream
换成OutputStreamWriter
,以便您可以发送字符串String.getBytes(encoding)
请注意,在这两种情况下,您都应明确指定编码,例如: " UTF-8" - 避免使用平台默认编码(这几乎总是一个坏主意)。
这只会发送字符数据本身 - 如果你需要发送几个字符串,另一端需要知道每个字符串的开始和结束位置,你需要一个更复杂的协议。如果它是两端的Java,您可以使用DataInputStream
和DataOutputStream
;否则你可能想要提出自己的协议(假设它已经没有修复)。
答案 3 :(得分:3)
如果你有一个简单的字符串,你可以做
socket.getOutputStream().write("your string".getBytes("US-ASCII")); // or UTF-8 or any other applicable encoding...
答案 4 :(得分:3)
您可以像这样使用OutputStreamWriter
:
OutputStreamWriter out = new OutputStreamWriter(socket.getOutputStream());
out.write("SomeString", 0, "SomeString".length);
您可能需要指定字符集,例如"UTF-8"
"UTF-16"
......
OutputStreamWriter out = new OutputStreamWriter(socket.getOutputStream(),
"UTF-8");
out.write("SomeString", 0, "SomeString".length);
或PrintStream
:
PrintStream out = new PrintStream(socket.getOutputStream());
out.println("SomeString");
或DataOutputStream
:
DataOutputStream out = new DataOutputStream(socket.getOutputStream());
out.writeBytes("SomeString");
out.writeChars("SomeString");
out.writeUTF("SomeString");
或者您可以在
中找到更多Writer
和OutputStream
答案 5 :(得分:1)
public void sendToPort() throws IOException {
DataOutputStream dataOutputStream = null;
Socket socket = null;
try {
socket = new Socket("ip address", 4014);
dataOutputStream = new DataOutputStream(socket.getOutputStream());
dataOutputStream.writeUTF("2"); // have to insert the string
} catch (UnknownHostException e) {
System.err.print(e);
} finally {
if(socket != null) {
socket.close();
}
if(dataOutputStream != null) {
dataOutputStream.close();
}
}
}
注意:您需要使用接收方的DataInputStream readUTF()方法。
注意:您必须在“finally”caluse中检查null;否则你将在以后遇到NullPointerException。
答案 6 :(得分:1)
我在这篇文章中看到了一堆非常有效的解决方案。我最喜欢使用Apache Commons来进行写操作:
IOUtils.write(CharSequence, OutputStream, Charset)
基本上做了例如:
IOUtils.write("Your String", socket.getOutputStream(), "UTF-8")
并捕捉适当的例外。如果您正在尝试构建某种协议,可以查看Apache commons-net库以获取一些提示。
你永远不会出错。在Apache commons-io中还有许多其他有用的方法和类可以节省您的时间。
答案 7 :(得分:0)
旧帖子,但我可以在大多数帖子中看到相同的缺陷。在关闭套接字之前,请刷新流。就像在@ Josnidhin的回答中一样:
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());
osw.flush();
} catch (IOException e) {
System.err.print(e);
} finally {
socket.close();
}
}