Программа зависает на s.writeObject(m)
, и я никак не могу понять почему. Клиент пытается отправить Message серверу, используется nio.
Фрагмент кода сервера:
public void go() {
Gui();
clientOutputStreams = new HashSet();
try {
System.out.println("Работаем ");
players = new HashSet<Player>();
serverSocket = ServerSocketChannel.open();
serverSocket.bind(new InetSocketAddress(5001));
while(true) {
SocketChannel clientSocket = serverSocket.accept();
ObjectOutputStream ois = new ObjectOutputStream(Channels.newOutputStream(clientSocket));
Thread t = new Thread(new ClientHandler(clientSocket));
t.start();
clientOutputStreams.add(ois);
clients = clientOutputStreams.size();
String clientsString = Integer.toString(clients);
Label1.setText("Кол-во клиентов: "+clientsString);
}
} catch (Exception ex) { ex.printStackTrace();
}}
//принимает сообщения
public class ClientHandler implements Runnable {
ObjectInputStream ois;
SocketChannel sock = null;
public ClientHandler(SocketChannel clientSOcket) {
try {
sock = clientSOcket;
sock.configureBlocking(true);
ois = new ObjectInputStream(Channels.newInputStream(clientSOcket));
System.out.println("Сокет "+sock);
} catch (Exception ex) { ex.printStackTrace(); }
}
public void run() {
Object messagen = null;
try {
while (ois.readObject()!=null&&sock.isConnected()) {
messagen = ois.readObject();
Message message = (Message) messagen;
System.out.println("read"+message.getContains());
if(message.getType()=="server"){
players.add(message.getPlayer());
sendPlayer();
}else{
sendMessage(message);}}
if(sock.isConnected()==false){
System.out.println("Соединение закрыто. ");
clients = clientOutputStreams.size();
String clientsString = Integer.toString(clients);
Label1.setText("Кол-во клиентов: "+clientsString);}
} catch (Exception e) {
e.printStackTrace();
clients = clientOutputStreams.size();
String clientsString = Integer.toString(clients);
Label1.setText("Кол-во клиентов: "+clientsString);}
}}
Фрагмент кода клиента:
public void socket(String ip,int port){
try {
soc = SocketChannel.open(new InetSocketAddress(ip,port));
stream = new ObjectInputStream(Channels.newInputStream(soc));
System.out.println("Maze "+soc.isConnected());
s = new ObjectOutputStream(Channels.newOutputStream(soc));
r = new Thread(new Reader());
r.start();
} catch (Exception e) {
e.printStackTrace();}
}
public void sendMessage(Message m){
try {
System.out.println("Отправка объектов ");
s.writeObject(m);
System.out.println("Отправка объектов11 ");
} catch (IOException e) {
e.printStackTrace();
}}
class Reader implements Runnable{
Object messagen;
@Override
public void run() {
try {
System.out.println("ррррр ");
while ((messagen = stream.readObject()) != null) {
Message message = (Message) messagen;
System.out.println("Получено "+ message.getContains());
distribution(message);
}} catch (Exception e) {
e.printStackTrace();}
}}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
ЗдравствуйтеИмеется выпадающий список(spinner) данные в этом выпадающем списке берутся из базы данных
Каким образом можно осуществить фоновой режим работы приложения, чтобы оно отслеживало текущую дату, и выводило уведомления? Даже если оно...