2014-01-14 4 views
1

Я создаю простой Java-сервер, который одновременно прослушивает клиентский запрос на двух портах одновременно с использованием двух экземпляров ServerSocket. Вот код для сервера:Прослушивание двух портов одновременно на Java-сервере с использованием многопоточности

import java.io.PrintWriter; 
import java.io.OutputStream; 
import java.net.ServerSocket; 
import java.net.Socket; 

class Socket1 implements Runnable 
{ 
    public void run() 
    { 
     try 
     { 
      ServerSocket serverSock=new ServerSocket(5000); 
      while(true) 
      { 
       Socket sock=serverSock.accept(); 
       PrintWriter writer=new PrintWriter(sock.getOutputStream()); 
       String text="Welcome to Port 5000"; 
       writer.println(text); 
      } 
     } 
     catch(Exception e) 
     { 
      System.out.println("Error"); 
     } 
    } 
} 

class Socket2 implements Runnable 
{ 
    public void run() 
    { 
     try 
     { 
      ServerSocket serverSock=new ServerSocket(3000); 
      while(true) 
      { 
       Socket sock=serverSock.accept(); 
       PrintWriter writer=new PrintWriter(sock.getOutputStream()); 
       String text="Welcome to Port 3000"; 
       writer.println(text); 
      } 
     } 
     catch(Exception e) 
     { 
      System.out.println("Error"); 
     } 
    } 
} 

public class Server 
{ 
    public static void main(String[] args) 
    { 
     Socket1 s1=new Socket1(); 
     Socket2 s2=new Socket2(); 
     Thread t1=new Thread(s1); 
     Thread t2=new Thread(s2); 
     t1.start(); 
     t2.start(); 
    } 
} 

Теперь код Client1:

import java.io.InputStreamReader; 
import java.io.BufferedReader; 
import java.net.Socket; 

public class Client1 
{ 
    public static void main(String[] args) 
    { 
     try 
     { 
      Socket s=new Socket("127.0.0.1", 5000); 
      InputStreamReader streamReader=new InputStreamReader(s.getInputStream()); 
      BufferedReader reader=new BufferedReader(streamReader); 
      String text=reader.readLine(); 
      System.out.println(text); 
      reader.close(); 
     } 
     catch(Exception e) 
     { 
      System.out.println("Error"); 
     } 
    } 
} 

Client2 содержит тот же код, Client1, той лишь разницей, что он пытается подключиться к порту 3000. Теперь, Сначала я запускаю Server.java, используя командную строку. Пока сервер блокирует, я открываю две отдельные команды и выполняю Client1.java в одной командной строке, а Client2.java - в другой командной строке. Но оба клиента переходят в состояние блокировки, и я не получаю никакого вывода. Любая идея, как это решить?

ответ

2

PrintWriter забуферирован defaut. Добавьте writer.flush() (или даже лучше close(), так как вы больше не используете поток) после writer.println().

0

Вы можете получить некоторые подсказки от этого link, у которого есть ответ на аналогичный вопрос, как ваш. Благодарю.

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