【问题标题】:Writing line, reading line, then closing a socket写线,读线,然后关闭套接字
【发布时间】: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 消息,然后挂起...我做错了什么?

【问题讨论】:

标签: java sockets


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-28
    • 2016-04-19
    • 1970-01-01
    • 2011-11-10
    • 1970-01-01
    • 2015-07-30
    相关资源
    最近更新 更多