如图所示,客户端111,客户端222,客户端333各发一次aaa,bbb,ccc之后,无论客户端111,222如何输入文字,都无法显示出来,但是客户端333可以一直发送文字,于是在客户端333中不断输入自己的名字发送出去,所有客户端都能接收到客户端333发出来的333名字,但是文字内容前的名字有部分不是333自己的,而是客户端111,或者客户端222的,求解
//这是服务器端处理消息的代码
public class serverReadAndPrint extends Thread{
Socket newsocket ;
String userName;
static BufferedReader br;
public serverReadAndPrint(Socket socket,String name) {
this.newsocket = socket;
this.userName = name;
}
public void run() {
try {
// 获取客户端信息,并把信息发送到客户端
br = new BufferedReader(new InputStreamReader(newsocket.getInputStream()));
while(true) {
String str = br.readLine();
System.out.println("收到消息");
//while ((str = br.readLine()) != null) {
//检验是否私聊,格式:@名字:内容
if (str.startsWith("@")) {
System.out.println("发送给某人");
System.out.println("@格式正确");
int index = str.indexOf(":");
System.out.println(":格式正确");
if (index >= 0) {
// 获取名字
String name = str.substring(1, index);
// 获取信息
String massage = str.substring(index + 1, str.length());
String smassage = userName + " 对你说: " + massage;
if (Server.userNameList.contains(name)) {
Socket s = Server.storeInfo.get(name);
PrintWriter pw1 = new PrintWriter(s.getOutputStream());
pw1.println(smassage);
pw1.flush();
PrintWriter pw2 = new PrintWriter(newsocket.getOutputStream());
pw2.println("(我)" + userName + " 对 " + name + " 说: " + massage);
pw2.flush();
}
}
} else {
// 发送给所有客户端
System.out.println("------------");
System.out.println("发送给所有人");
for (Socket socket : Server.list) {
PrintWriter pw = new PrintWriter(socket.getOutputStream());
if (socket == newsocket) {
pw.println("(我)" + userName + " 说: " + str);
} else {
pw.println(userName + " 说: " + str);
}
pw.flush();
}
}
}
//}
} catch (IOException e) {
// TODO Auto-generated catch block
//关闭相应套接字
Server.list.remove(newsocket);
//删除当前套接字用户名的名字
Server.userNameList.remove(userName);
}
}
}
//这是客户端处理消息的代码
public class clientReadAndPrint extends Thread {
static Socket socket;
static BufferedReader br;
Client client;
public clientReadAndPrint(Socket mySocket) {
clientReadAndPrint.socket = mySocket;
}
// 用于接受服务器端发来的消息
public void run() {
try {
br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
while (true) {
// while ((str = br.readLine())!=null) {
String str = br.readLine();
// 将得到的信息投影到ta上
Client.ta.append(str + '\n');
// 设置滚动条在最下面
Client.ta.setCaretPosition(Client.ta.getDocument().getLength());
// }
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}