我在编程方面很新鲜,也是做聊天应用的家庭作业的一部分。它应该通过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());}
}
`
在我缺乏想法的那一刻,我将不胜感激。
答案 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));
}