Не передается объект по SocketChannel

237
24 апреля 2017, 02:38

Программа зависает на 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();}
    }}
READ ALSO
DBUtils Column &#39;id&#39; not found Java JDBC

DBUtils Column 'id' not found Java JDBC

Использую DBUtils для работы с базойИмею такой запрос:

208
Выпадающий список и БД (java android)

Выпадающий список и БД (java android)

ЗдравствуйтеИмеется выпадающий список(spinner) данные в этом выпадающем списке берутся из базы данных

556
Работа приложения в фоне

Работа приложения в фоне

Каким образом можно осуществить фоновой режим работы приложения, чтобы оно отслеживало текущую дату, и выводило уведомления? Даже если оно...

206
Определение первого символа

Определение первого символа

Есть кодВ метод передается массив слов String

203