【发布时间】:2017-09-10 21:04:15
【问题描述】:
我需要从 Java 连接到一个 tcp/ip 套接字,以便执行一些事情:
1) 从套接字读取数据(可选的 'hello' 消息),然后丢弃它;
2) 将单行数据作为字符串写入套接字;
3) 从socket读取响应,单行,存入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
然后我想发送我的命令字符串:
定义 wn java
最后我想将整个响应存储到一个字符串中:
检索到 150 1 个定义 151 "java" wn "WordNet (r) 3.0 (2006)" 爪哇 n 1:印度尼西亚婆罗洲南部的一个岛屿;中的一个 世界上人口最稠密的地区 2:一种由磨碎的咖啡豆制成的饮料; “他点了一杯咖啡” [syn: {coffee}, {java}] 3:独立于平台的面向对象编程语言。 250 好 [d/m/c = 1/0/14; 0.000r 0.000u 0.000s]
我的方法只显示 hello 消息,然后挂起...我做错了什么?
【问题讨论】:
-
强烈建议使用 DataFetcher(在自己的线程中运行)从您的套接字中读取:sourceforge.net/p/tus/code/HEAD/tree/tjacobs/io/…