Ответ 1
Вам нужно использовать ServerSocket
. Вы можете найти объяснение здесь.
Серверное программное обеспечение, с которым мой клиент взаимодействует, регулярно отправляет сообщения транзакций на порт 4000. Мне нужно печатать эти сообщения в консоли по очереди. (В конце концов мне придется записывать эти значения в таблицу, но Im сохраняет это для более поздних версий.)
Я пробовал этот код, но он ничего не выводит:
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();
}
}
}
Кстати, мне нужно контролировать этот порт, пока программа не завершится. Я не уверен, что код выше сможет это сделать, потому что я не вижу никакой итерации кода.
Im с использованием Java версии 1.6.0_24, среды выполнения SE (build 1.6.0_24-b07), запущенной на Ubuntu.
Вам нужно использовать ServerSocket
. Вы можете найти объяснение здесь.
Чего вы на самом деле хотите достичь? Что делает ваш код, он пытается подключиться к серверу, расположенному в 192.168.1.104:4000
. Является ли это адресом сервера, который отправляет сообщения (потому что это похоже на клиентский код)? Если я запускаю поддельный сервер локально:
$ nc -l 4000
... и измените адрес сокета на localhost:4000
, он будет работать и попытаться прочитать что-то из nc
-созданного сервера.
ServerSocket
и прослушать его:ServerSocket serverSocket = new ServerSocket(4000);
Socket socket = serverSocket.accept();
Вторая строка будет блокироваться до тех пор, пока какая-либо другая часть программного обеспечения не подключится к вашей машине на порту 4000. Затем вы можете прочитать из возвращенного сокета. Посмотрите этот учебник, это на самом деле очень широкая тема (потоки, протоколы...)
Попробуйте этот фрагмент кода, а не 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;
}
}