使用Java将流连接到套接字

时间:2015-08-29 08:47:12

标签: java sockets server inputstream outputstream

我在编程方面很新鲜,也是做聊天应用的家庭作业的一部分。它应该通过IP地址连接到另一台计算机,在一个单独的线程中创建Server和Socket,不断监听abd写入的内容。这没关系。 `

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连接到套接字。由于某种原因,他无法看到Socket。方法send()我已经定义为静态i一个单独的类,名为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());}
    }

`

在我缺乏想法的那一刻,我将不胜感激。

1 个答案:

答案 0 :(得分:1)

我建议您通过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));
}