Эта проблема прослушивает меня уже более суток, и я не могу найти исправление для него. Я пишу приложение чата в Java. Проблема в том, что сервер не может отправлять сообщения клиентам, но может получать только it.Here мои классов:Java-клиент Java
класса сервера:
public class Server implements Runnable {
static InetAddress address;
static ArrayList<Integer> clients=new ArrayList<Integer>();
static ArrayList<Socket> socs=new ArrayList<>();
static String message="";
static DataOutputStream toClient;
static ServerSocket socket;
static Socket socketNew;
static boolean running=false;
public Server(InetAddress address){
this.address=address;
}
public static void main(String[] args) throws IOException
{
socket=new ServerSocket(8000);
System.out.println("Server started on port 8000");
running=true;
while(true)
{
socketNew=socket.accept();
socs.add(socketNew);
address=socketNew.getInetAddress();
System.out.println("connected to client at address: "+address);
Server server=new Server(address);
new Thread(server).start();
}
}
public void run() {
{
try {
BufferedReader br = new BufferedReader(new InputStreamReader(socketNew.getInputStream()));
String message=br.readLine();
System.out.println(message);
for(Socket s:socs) //sending the above msg. to all clients
{
OutputStream os=os = s.getOutputStream();
PrintWriter pw = new PrintWriter(os, true);
pw.write(message);
pw.flush();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
private void message() {
}
}
Вот мой класс клиента соответствующих функций:
private void receive_data()
{
BufferedReader br;
try {
br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String message=br.readLine();
console(message);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private void send_data() {
OutputStream os;
try {
os = socket.getOutputStream();
PrintWriter pw = new PrintWriter(os, true);
pw.println(this.name+": "+textField.getText());
pw.flush();
textField.setText("");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Кроме того, остановка сервера принимает никаких сообщений от клиента после самого первого сообщения. Я думал, что проблема может быть устранена путем включения содержимого метода run() в класс сервера внутри while loop.But это бросает исключения таким образом. Все решения этой проблемы?
Да, вам нужно приложить его петлей. Пожалуйста, измените его и включите исключения, которые он выбрасывает (полная трассировка стека) в вашем вопросе. – RealSkeptic
Проблема с этим методом заключается в том, когда я убиваю окно клиента, есть множество исключений, и это тоже бесконечное нет. times.I пробовал что-то вроде while (running), где выполняется изначально true.If любое исключение поймано, я устанавливаю равным false.Но так, другие клиенты также не могут отправлять-получать любые сообщения на сервер. не могли бы вы помочь мне с моей первой проблемой? Почему клиенты не могут получать сообщения с сервера? –
Могут ли они получать сообщения от других клиентов? –