写线,读线,然后关闭套接字

时间:2017-04-14 15:12:09

标签: java sockets

我需要从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]

我的方法只显示问候消息,然后挂起......我做错了什么?

1 个答案:

答案 0 :(得分:1)

您的方法称为writeLine,但它不会写一行,除非该字符串已经有一个行终止符。添加一个。