2012-02-02 3 views
0

Я пытаюсь использовать поток сокетов для нескольких передач данных.Несколько выходов на сокете

  • для отправки List<>
  • для отправки текста
  • ...

Могу ли я использовать только один разъем для отправки String, что говорит клиент, какие данные ожидать, а затем по ожидаемым данным (в данном случае List<>)?

Вот что я имел в виду:

//declarations 
//outputs and inputs 
    private ObjectInputStream input; 
    private ObjectOutputStream output; 
    private OutputStream checkStatus; 
    private PrintWriter out; 
    ... 
    private void forwardMessage(List<User> clients) throws IOException { 
     checkStatus = client.getOutputStream(); 
     out = new PrintWriter(new OutputStreamWriter(checkStatus), true); 
     out.println("Command Option 1");  
     client.shutdownOutput(); 
     output = new ObjectOutputStream (client.getOutputStream()); 
     for (int i = 0; i < clients.size(); i++) {  
      output.flush(); 
      output.writeObject(clients.get(i)); 
      output.flush(); 
      output.reset(); 
     } 
     output.writeObject(null); 
     client.shutdownOutput(); 
    } 

Ошибка дается, когда я пытаюсь это «java.net.SocketException: Socket is closed»

Я также попытался закрыть OutputStream, но это дает тот же результат.

Как я могу использовать только один поток-сокет для нескольких передач данных?

+2

почему client.shutdownOutput(); перед getOutputStream()? – kosa

ответ

0

Если вы пытаетесь отправить эти данные по сети, это может помочь:

http://systembash.com/content/a-simple-java-udp-server-and-udp-client/

тогда, когда дело доходит до обнаружения данных, вы всегда можете сделать что-то вроде этого:

if(name_of_your_string.compare("what_you_are_looking_for")){ //what you want to do with "what_you_are_looking_for" }

Смежные вопросы