2013-02-25 3 views
-3

Я сделал простое приложение для подключения к серверу с клиентом в Java Это не работаетгнезда писать не отвечает

Я использую новое гнездо («локальный», 4444); для клиента и нового ServerSocket (4444); для сервера

Клиент: http://www.hastebin.com/siqamonebu.coffee

Сервер: http://www.hastebin.com/rivebetani.avrasm

я разместил код на hastebin, потому что его большой, чтобы разместить здесь я понятия не имею, что часть сломана, но сервер не получает сообщение, которое вы говорите

+3

'Я отправил код на hastebin, потому что его в big'. Пожалуйста, прочитайте http://sscce.org – SJuan76

+0

Вы действительно думаете, что я это прочитаю? : P – user2107534

+1

@ user2107534 Лучше бы. Потому что большинство людей здесь откажутся отказываться отвечать на вопросы, которые не выдерживают испытаний «что вы пробовали» и «sscce». – Cubic

ответ

2

ChatServer - вещает на всех подключенных клиентов

В одной командной строке: java ChartServer
В другом: java ChatClient localhost(или IP-адрес, где сервер работает)
и другое: java ChatClient localhost(или IP-адрес, где находится сервер)

Начать беседу на ветру клиента РМО.

сервера, как это ...

// xagyg wrote this, but you can copy it 
import java.io.*; 
import java.net.*; 
import java.util.*; 

public class ChatServer { 

    public static List list = new ArrayList(); 

    public static void main(String[] args) throws Exception { 

     ServerSocket svr = new ServerSocket(4444); 

     System.out.println("Chat Server started!"); 

     while (true) { 
      try { 
       Socket s = svr.accept(); 
       synchronized(list) { 
        list.add(s);    
       }         
       new Handler(s, list).start(); 
      } 
      catch (IOException e) { 
       // print out the error, but continue! 
       System.err.println(e); 
      } 
     } 
    } 
} 

class Handler extends Thread { 

    private Socket s; 
    private String ipaddress; 
    private List list; 

    Handler (Socket s, List list) throws Exception { 
     this.s = s; 
     ipaddress = s.getInetAddress().toString(); 
     this.list = list; 
    } 

    public void run() { 

     try { 

     BufferedReader reader = new BufferedReader(new InputStreamReader(s.getInputStream())); 
     String message; 
     //MyDialog x = (MyDialog)map.get(ipaddress.substring(1)); 
     while ((message = reader.readLine()) != null) { 
      if (message.equals("quit")) { 
       synchronized(list) { 
        list.remove(s); 
       } 
       break; 
      } 
      synchronized(list) { 
       for (Object object: list) { 
        Socket socket = (Socket)object; 
        if (socket==s) continue; 
        PrintWriter writer = new PrintWriter(socket.getOutputStream()); 
        writer.println(ipaddress + ": " + message); 
        writer.flush(); 
       } 
      } 
     } 
     try { reader.close(); } catch (Exception e) {} 
     } 
     catch (Exception e) { 
     System.err.println(e); 
     } 
    } 
} 

Клиент, как это ...

// xagyg wrote this, but you can copy it 
import java.util.*; 
import java.io.*; 
import java.net.*; 

public class ChatClient { 


    public static void main(String[] args) throws Exception { 

     Socket s = new Socket(args[0], 4444); 
     BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream())); 
     PrintWriter out = new PrintWriter(s.getOutputStream()); 
     BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); 
     String message; 
     new SocketReader(in).start(); 
     while ((message = reader.readLine())!=null) { 
      out.println(message); 
      out.flush(); 
      if (message.equals("quit")) break; 
     } 
     in.close(); 
     out.close(); 
    }   
} 

class SocketReader extends Thread { 

    BufferedReader in; 

    public SocketReader(BufferedReader in) { 
     this.in = in; 
    } 

    public void run() { 
     String message; 
     try { 
      while ((message = in.readLine())!=null) { 
       System.out.println(message); 
      } 
     } 
     catch (Exception e) { 
      throw new RuntimeException(e); 
     }   
    } 
} 
0

Я думаю, это потому, что, как вы начинаете свой сервер, попробуйте с этой структурой, поскольку вы создаете ServerSocket внутри метода run, что может вызвать конфликт:

public class ThreadSocketServer implements Runnable { 

    private int port; 
    private boolean isRunning; 
    private ServerSocket ss; 

    public ThreadSocketServer(int port, boolean initialStatus) { 
     this.port = port; 
     isRunning = initialStatus; 
     System.out.println("Start the server!"); 
     try { 
      ss = new ServerSocket(port); 
      Thread threadServer = new Thread(this); 
      threadServer.start(); 
     } catch (IOException e) { 
      System.err.println(e.getClass() + " - " + e.getMessage()); 
     } 
    } 

    @Override 
    public void run() { 

     while (isRunning) { 
      try { 
       Socket client = ss.accept(); 

       ObjectInputStream ois = new ObjectInputStream(
         client.getInputStream()); 
       //Process here 
       ois.close(); 
      } catch (IOException e) { 
       System.err.println(e.getClass() + " - " + e.getMessage()); 
       isRunning = false; 
      } catch (ClassNotFoundException e) { 
       System.err.println(e.getClass() + " - " + e.getMessage()); 
       isRunning = false; 
      } 
     } 

    } 

    public static void main(String[] args) { 
     new ThreadSocketServer(1085, true); 
    } 
+0

Не исправить:/ – user2107534

+0

mmm ... Вы пробовали скопировать и вставить мой код, чтобы проверить его? Тогда, возможно, вы сможете адаптировать свой код и заменить свою логику вместо моей, которая находится внутри блока try: Socket client = ... до ois.close(). –