簡體   English   中英

將流連接到Java中的套接字

[英]Connecting the Streams to a Socket in Java

我在編程方面很新鮮,並且作為做聊天應用程序的家庭作業的一部分。 它應該通過IP地址連接到另一台計算機,並在單獨的線程中創建了服務器和套接字,並不斷地聽着寫着什么。 沒關系。 `

public class MyConnection extends Thread {
    @Override
    public void run (){

    try (ServerSocket eServer = new ServerSocket(1300);
        Socket cn = eServer.accept();
        BufferedReader bf = new BufferedReader(new InputStreamReader(cn.getInputStream()));)
    {
        String line;
        StringBuilder sb = new StringBuilder();
        while ((line = bf.readLine()) != null) {
        sb.append(line);
        }
        HelpClass.writeStatus(sb.toString());
        }

    catch(IOException exc ) {Pomocna.writeStatus("An error occured: " + exc.getMessage());
}
}
}

`

當我想制作發送消息的方法時,必須將OutputStream連接到套接字,就會出現問題。 由於某種原因,他看不到套接字。 方法send()我已將一個單獨的類定義為靜態類,稱為HelpClass(不確定這是否是一種好習慣),以下是該方法:

`

 public static void send(String content){
    try (BufferedOutputStream bof = new BufferedOutputStream(getOutputStream(cn))){
        byte[] b = content.getBytes(Charset.forName("UTF-8"));
        bof.write(b);
    }

catch(IOException exc) {System.out.println("An error occured: " +     exc.getMessage());}
    }

`

目前我已經沒有想法了,不勝感激。

我建議您傳入Socket cn來解決此問題並弄清楚您要發送的內容。

注意:您應該-只能為每個連接創建一個BufferedOutputStream或一個BufferedInputStream,否則您可能會看到數據丟失。 -或不要使用緩沖,因為您似乎根本就沒有使用它。

也不要捕獲異常並繼續進行,好像沒有發生一樣。 如果寫入失敗,則需要關閉連接。 即不要以為日志記錄就足夠了。 根本不了解它會更簡單。

這就是我寫send

public static void send(Socket sc, String content) throws IOException {
    String toSend = content+"\n"; // assume we are reading with readLine()
    sc.getOutputStream().write(toSend.getBytes(StandardCharSets.UTF8));
}

暫無
暫無

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

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