簡體   English   中英

寫線,讀線,然后合上插座

[英]Writing line, reading line, then closing a socket

我需要從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,收到第一條“ hello”消息(我對此不感興趣):

220 pan.alephnull.com在Linux 4.4.0-1-amd64上規定為1.12.1 / rf <42349519.9983.1492182590@pan.alephnull.com>

然后我要發送命令字符串:

定義wn Java

最后,我想將整個響應存儲到一個String中:

檢索到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]

我的方法僅顯示問候消息,然后掛起...我在做什么錯?

您的方法稱為writeLine但它不會寫行,除非字符串已經具有行終止符。 加一。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM