Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Работа с сетью > Java Socket Client-Server + eclipse windowbuilder


Автор: chiffa 22.4.2014, 14:47
Все добрый день. Столкнулся с необходимость построение приложения клиент севрера на Яве. В сети, вообщем, полно примеров. Использую такое:

Сервер:
Код

package com.server.main;
import java.net.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.io.*;

import com.my.function.MyFunc;
import com.my.function.ReadXMLFile;
import com.my.vars.VARIABLE;

public class main {
    
    public static void main(String[] args) throws IOException
    {
        
     System.out.println("Welcome to Server side");
        BufferedReader in = null;
        PrintWriter    out= null;

        ServerSocket servers = null;
        Socket       fromclient = null;

        // create server socket
        try {
          servers = new ServerSocket(1900);
        } catch (IOException e) {
          System.out.println("Couldn't listen to port 1900");
          System.exit(-1);
        }

        try {
          System.out.print("Waiting for a client...");
          fromclient= servers.accept();
          System.out.println("Client connected");
        } catch (IOException e) {
          System.out.println("Can't accept");
          System.exit(-1);
        }

        in  = new BufferedReader(new 
         InputStreamReader(fromclient.getInputStream()));
        out = new PrintWriter(fromclient.getOutputStream(),true);
        String         input,output;

        System.out.println("Wait for messages");
        
        while ((input = in.readLine()) != null) {
         if (input.equalsIgnoreCase("exit")) break;
         out.println("S ::: "+input);
         System.out.println(input);
        }
        out.close();
        in.close();
        fromclient.close();
        servers.close();
        
        
    }

}




Клиент:
Код

package com.socket.client;

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

public class SocketClient {
    public static void main() throws Exception {
        // Определяем номер порта, на котором нас ожидает сервер для ответа
        int portNumber = 1900;

        String str = "Тестовая строка для передачи";

        System.out.println("Client is started");

        Socket socket1 = new Socket("127.0.0.1", portNumber);
        BufferedReader br = new BufferedReader(new InputStreamReader(socket1.getInputStream()));

        PrintWriter pw = new PrintWriter(socket1.getOutputStream(), true);

        pw.println(str);

        while ((str = br.readLine()) != null) {

            System.out.println(str);
          
        }
        br.close();
        pw.close();
        socket1.close();
    }
}


Далее в графической форме, при нажатии на кнопку вызываю

SocketClient SocketClients = new SocketClient ();
        try {
            SocketClients.main();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

Все проходит нормально, сервер получил сообщение и вернул его клиенту, но кнопка "залипла" нажатой.

я так понимаю виснет на процессе чтения
while ((str = br.readLine()) != null) {

            System.out.println(str);
          
        }

Пока идея реализации: запуск в отдельном потоке, но тогда возникает вопрос как оно будет работать на старых одно-ядерных компах?....

Подскажите, как правильно реализовать подобное? Заранее всемс пасибо!

Автор: LSD 22.4.2014, 19:57
Цитата(chiffa @  22.4.2014,  15:47 Найти цитируемый пост)
Пока идея реализации: запуск в отдельном потоке, но тогда возникает вопрос как оно будет работать на старых одно-ядерных компах?

Хорошо будет работать. Потоков в системе всегда больше чем ядер, это нормально.

Автор: chiffa 22.4.2014, 21:27
Уже пробовал и так, все равно зависает. Явно какой то момент не учитывают....

Автор: Pawl 4.6.2014, 07:35
Посмотрите эту http://forum.vingrad.ru/forum/topic-376443/kw-socket-сервер-клиент-connection-reset.html. Там в конце как раз пример клиент-сервера с графической оболочкой.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)