某一个客户端断开连接后再连接,可以发消息给服务器端,但是接收不到服务器端的消息,或者就是服务器端不会发消息给它。
以下是代码,希望大佬指点一二
服务器端代码:
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.io.*;
import java.net.*;
import java.sql.*;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.concurrent.*;
public class ChatRoomServer {
public static void main(String[] args) {
JFrame f=new JFrame("Server");
f.setBounds(200,200,600,600);
f.setLayout(null);
JPanel p1=new JPanel();
p1.setBounds(1,1,400,400);
p1.setLayout(null);
JPanel p2=new JPanel();
p2.setBounds(1,401,400,190);
p2.setLayout(null);
JTextArea jta=new JTextArea();
jta.setBounds(2,2,300,390);
JTextField jtf=new JTextField();
jtf.setBounds(50,50,200,80);
JButton b=new JButton("发送");
b.setBounds(280,80,80,30);
p1.add(jta);
p2.add(jtf);
p2.add(b);
f.add(p1);
f.add(p2);
//焦点给键盘,因为键盘监听和按钮监听会有冲突
b.setFocusable(false);
//存储建立的连接
List<Socket> sockets=new ArrayList<>();
try {
b.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent actionEvent) {
try {
String send=jtf.getText();
if(send!="")
{
jta.append("server: "+send+"\r\n");
jtf.setText("");
for(Socket s:sockets)
{
//不进行判断的话,一个客户端断开连接其它客户端也收不到消息
if(s!=null)
{
OutputStream os = s.getOutputStream();
DataOutputStream dos = new DataOutputStream(os);
dos.writeUTF("server: "+send);
}
}
}
}
catch (Exception e)
{
e.printStackTrace();