Java 写线,读线,然后合上插座
我需要从Java连接到tcp/ip套接字,以便执行一些操作: 1) 从套接字读取数据(可选的“hello”消息),然后丢弃它 2) 将单行数据作为字符串写入套接字 3) 从套接字读取响应,一行,并将其存储到字符串中 4) 合上插座 我写了这段代码:Java 写线,读线,然后合上插座,java,sockets,Java,Sockets,我需要从Java连接到tcp/ip套接字,以便执行一些操作: 1) 从套接字读取数据(可选的“hello”消息),然后丢弃它 2) 将单行数据作为字符串写入套接字 3) 从套接字读取响应,一行,并将其存储到字符串中 4) 合上插座 我写了这段代码: public String writeLineToSocket(String s) throws IOException { Socket socket = null; OutputStreamWriter osw
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,我收到了第一条“hello”消息(我对此不感兴趣):
220在Linux 4.4.0-1-amd64上运行pan.alephnull.com dictd 1.12.1/rf
然后我想发送我的命令字符串:
定义wn java
最后,我想将整个响应存储到一个字符串中:
150 1检索到的定义151“java”wn“WordNet(r)3.0(2006)”
JAVA
n 1:婆罗洲以南印度尼西亚的一个岛屿;其中一个
世界上人口最密集的地区
2:由磨碎的咖啡豆浸液组成的饮料;
“他点了一杯咖啡”[syn:{coffee},{java}]
3:独立于平台的面向对象编程语言。250正常[d/m/c=1/0/14;0.000r 0.000u 0.000s]
我的方法只显示hello消息,然后挂起。。。我做错了什么?您的方法称为
writeLine
,但它不写行,除非字符串已经有行终止符。添加一个。强烈建议使用DataFetcher(在自己的线程中运行)从套接字读取:后跟