Сложность с сокетной связью между сервером и клиентом - PullRequest
1 голос
/ 22 февраля 2012

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

Я запускаю сервер, а затем сервер вызывает конструктор клиента и передает соединение через порт клиенту, и поток запускается на стороне клиента.

Проблема у меня заключается в том, что когда я запускаю серверную часть, она не хочет выходить за рамки вызова конструктора. Кажется, застрял в конструкторе.

Извините, все это звучит немного запутанно

Любые мысли возможно

это серверная сторона

ServerMultipleThreads()
{


    System.out.println("Starting the server first...");
    try
    {
        ServerSoc = new ServerSocket(7777);
        listening = true;

    }
    catch(Exception e)
    {
        System.out.println(e.toString());
        System.exit(1);

    }

    System.out.println("The server has started running");

    while(listening)
    {
        try
        {
            //creating the client socket and starting the new client session
            new ClientSession(ServerSoc.accept());
            System.out.println("The clientSession was called");
            in = new DataInputStream(clientSocket.getInputStream());
            BufferedReader is = new BufferedReader(new InputStreamReader(in));
            os = new PrintStream(clientSocket.getOutputStream());

            while(true)
            {
                line = is.readLine();
                PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("myFile,txt")), true);
                out.println(line);
            }


        }
        catch(IOException ioe)
        {
                System.out.println(ioe.toString());
        }
    }

}

и это на стороне клиента

ClientSession(Socket s)
{
    clientSocket = s;

    try
    {


        out = new PrintWriter(clientSocket.getOutputStream(), true);
        in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
        out.println("Welcome");

    }
    catch(IOException exe)
    {
        System.out.println(exe.toString());

    }
    //starting the thread
    while(runner == null)
    {
        runner = new Thread(this);
        runner.start();
    }
}

public void run()
{
    while(runner == Thread.currentThread())
    {
        BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));
        String stdIn;

        try
        {
            while((stdIn = buf.readLine()) != null)
            {
                out.println(stdIn);
            }
        }
        catch(IOException exe)
        {
            exe.toString();

        }
        try
        {
            Thread.sleep(10);
        }
        catch(InterruptedException e){}

    }

С уважением Arian

1 Ответ

1 голос
/ 22 февраля 2012

Это потому, что ServerSocket.accept() блокируется, пока не получит запрос клиента.Вам нужен клиент, вызывающий сервер, что-то вроде этого:

Socket socket = new Socket(host, port);
InputStream in = socket.getInputStream();
// write some data...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...