Прослушивание порта через сокет Java - PullRequest
26 голосов
/ 09 июня 2011

Серверное программное обеспечение, с которым мой клиент регулярно общается, отправляет сообщения о транзакциях через порт 4000. Мне нужно выводить эти сообщения на консоль построчно.(В конце концов мне придется записать эти значения в таблицу, но я сохраню это на потом.)

Я попробовал этот код, но он ничего не выводит:

package merchanttransaction;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.lang.ClassNotFoundException;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;

public class MerchantTransaction {
    public static void main(String[] args) {
        try {
            InetAddress host = InetAddress.getLocalHost();
            Socket socket = new Socket("192.168.1.104", 4000);
            ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
            String message = (String) ois.readObject();
            System.out.println("Message: " + message);

            ois.close();
        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}

Кстати, мне нужно иметь возможность контролировать этот порт, пока программа не завершится.Я не уверен, что приведенный выше код сможет это сделать, потому что я не вижу никакой итерации к коду.

Я использую версию Java 1.6.0_24, SE Runtime Environment (сборка 1.6.0_24-b07) работает в Ubuntu.

Ответы [ 3 ]

25 голосов
/ 10 июня 2011

Вам нужно использовать ServerSocket.Вы можете найти объяснение здесь .

13 голосов
/ 10 июня 2011

Чего вы на самом деле хотите достичь?Ваш код пытается подключиться к серверу, расположенному по адресу 192.168.1.104:4000.Это адрес сервера, который отправляет сообщения (потому что это похоже на код на стороне клиента)?Если я запускаю поддельный сервер локально:

$ nc -l 4000

... и меняю адрес сокета на localhost:4000, он будет работать и попытаться что-то прочитать с сервера, созданного nc.

Вероятно, вам нужно создать ServerSocket и прослушать его:

ServerSocket serverSocket = new ServerSocket(4000);
Socket socket = serverSocket.accept();

Вторая строка будет блокироваться до тех пор, пока какой-либо другой программный продукт не подключится к вашей машине через порт 4000. Затем вы сможете читать извернул сокет.Посмотрите этот учебник, на самом деле это очень широкая тема (потоки, протоколы ...)

4 голосов
/ 10 июня 2011

Попробуйте этот кусок кода, а не ObjectInputStream.

BufferedReader in = new BufferedReader (new InputStreamReader (socket.getInputStream ()));
while (true)
{
    String cominginText = "";
    try
    {
        cominginText = in.readLine ();
        System.out.println (cominginText);
    }
    catch (IOException e)
    {
        //error ("System: " + "Connection to server lost!");
        System.exit (1);
        break;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...