我需要从Java连接到tcp / ip套接字,以执行一些操作:
1)从套接字读取数据(可选的' hello'消息),然后丢弃它;
2)将一行数据作为字符串写入套接字;
3)从套接字读取响应,单行,并将其存储到String;
4)关闭插座;
我写了这段代码:
public String writeLineToSocket(String s) throws IOException {
Socket socket = null;
OutputStreamWriter osw = null;
BufferedReader is = null;
String response = null;
try {
socket = new Socket(serverAddress, serverPort);
is = new BufferedReader(new InputStreamReader(socket.getInputStream()));
osw = new OutputStreamWriter(socket.getOutputStream(), "UTF-8");
osw.write(s, 0, s.length());
osw.flush();
response = is.readLine();
System.out.println(response);
} catch (IOException e) {
e.printStackTrace();
} finally {
if (socket!=null) socket.close();
if (osw!=null) osw.close();
}
return response;
}
例如,使用 netcat dict.org 2628 我有第一个问候语'消息(我对它不感兴趣):
220 pan.alephnull.com dictd 1.12.1 / rf on Linux 4.4.0-1-amd64< 42349519.9983.1492182590@pan.alephnull.com>
然后我想发送我的命令字符串:
DEFINE wn java
最后,我想将整个响应存储到一个字符串中:
检索到150个1个定义151" java" wn" WordNet(r)3.0(2006)" Java的 n 1:婆罗洲南部印度尼西亚的一个岛屿;其中一个 世界上人口最稠密的地区 2:由磨碎的咖啡豆注入的饮料; "他点了一杯咖啡" [syn:{coffee},{java}] 3:独立于平台的面向对象编程语言。 250 ok [d / m / c = 1/0/14; 0.000r 0.000u 0.000s]
我的方法只显示问候消息,然后挂起......我做错了什么?
答案 0 :(得分:1)
您的方法称为writeLine
,但它不会写一行,除非该字符串已经有一个行终止符。添加一个。