用Socket编程的聊天室出了问题,求大佬指点一下。

weixin_41079121 weixin_41079121 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
在客户端输入好信息后,按回车就会抛出socket is closed异常。
附上源码
服务器端

public class Server {

public static ArrayList<Socket> list=new ArrayList<Socket>();
ServerSocket ss=null;

public static void main(String[] args) {
// TODO Auto-generated method stub
new Server();

}

public Server() {
try {
ss=new ServerSocket(1234);
System.out.println("服务器已启动,正在等待连接。。。");
while(true) {
try {
Socket s=ss.accept();
String shangxian=s.getInetAddress().getHostAddress()+"已上线";
System.out.println(shangxian);
list.add(s);
MyThread p=new MyThread(s);
new Thread(p).start(); //启动一个转发消息的线程
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}


}

class MyThread implements Runnable{

Socket s;
String msg;
BufferedReader br;
BufferedWriter bw;
public MyThread(Socket s) {
this.s=s;
}
@Override
public void run() {
try {
String shangxian=s.getInetAddress().getHostAddress()+"已上线";
for(Socket socket:Server.list) { //给每个客户端上线提醒
bw=new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
bw.write(shangxian);
bw.newLine();
bw.flush();
}
br=new BufferedReader(new InputStreamReader(s.getInputStream()));
while(true) {
msg=br.readLine();
br.close();
for(Socket socket:Server.list) { //给每个客户端转发消息
BufferedWriter bw1=new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
bw1.write(msg);
bw1.newLine();
bw1.flush();

}
}


} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

}



客户端


public class Client {

public static void main(String[] args) {
new Client();
}
public Client() {
try {
Socket s=new Socket("127.0.0.1",1234);
System.out.println("服务器连接成功");
String msg;
ReceiveThread t=new ReceiveThread(s);
new Thread(t).start();
BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
Scanner sc=new Scanner(System.in);
while(true) {
msg=sc.nextLine();
bw.write(msg);
bw.newLine();
bw.flush();
}
} catch (UnknownHostException e) {
System.out.println("未知的服务器地址");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

class ReceiveThread implements Runnable{

String msg;
Socket s=null;

public ReceiveThread(Socket s) {
// TODO Auto-generated constructor stub
this.s=s;
}


public void run() {
try {
BufferedReader br=new BufferedReader(new InputStreamReader(s.getInputStream()));
while(true) {
msg=br.readLine();
if(msg!=null)
System.out.println(msg);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

}
}
...全文

相关推荐

windows编程的基于socket的简易聊天室

本文档主要介绍了如何在Windows平台上使用socket编程实现一个简易的聊天室。首先,讨论了所需的库文件,如`Talk.cpp`、`resource.h`、`Talk.rc`以及`Talk.ini

jzd8000

基于Socket编程的网络聊天室

可行性分析 (1)操作可行性 聊天室是提供给网民一个交友与娱乐的场所。在聊天室里,网民可选择自己的聊天对象,与其进行对话交流,是网民之间相互沟通、交流情感的最佳方式之一。 利用聊天室,用户可以通过网络在线与距离遥远的其他一位或多位用户进行信息交流。既可以一对一,又可以一对多,还可以形成小组进行多对多讨论,方便网民在线私聊与群聊,是现行网络最流行、最被广泛应用的通讯工具。 (2)技术......

@ZhangJun

socket编程聊天室(C++)

Socket编程是计算机网络通信中的重要技术,主要用于实现进程间的网络通信。在这个“socket编程聊天室(C++)”项目中,我们主要会涉及到以下几个关键知识点:1.

qq329025705

Python Socket编程之多线程聊天室

本文所讨论的Python Socket编程之多线程聊天室,是指利用Python的Socket编程以及多线程技术,开发一个支持多用户同时在线交流的聊天室应用程序。

weixin_38567962

Java编程实现基于TCP协议的Socket聊天室示例

Java编程实现基于TCP协议的Socket聊天室示例Java编程实现基于TCP协议的Socket聊天室是指使用Java语言编程实现基于TCP协议的Socket聊天室的技术。

weixin_38653040
评论
收藏 已收藏
分享
返回顶部
weixin_41079121
Java EE 67,535 成员 225,843 内容