Я пытаюсь разработать простое решение, которое позволит мне передавать данные от двух клиентов друг другу через сервер.
Я новичок в Java, поэтому для меня это довольно сложно. В настоящее время у меня есть конструктор, который устанавливает соединение с сервером, и сервер ответит, когда соединение будет успешным (на данный момент это работает).
Мое приложение представляет собой программу с графическим интерфейсом, поэтому я подумал, что лучше всего будет разместить соединение в paintComponent, поскольку к нему привязан таймер, поэтому я надеялся, что каждый тик таймера будет отправлять данные на сервер, однако это просто дает сбой. программа.
Что было бы лучшим способом -
Это моя конечная цель.
Мой код очень простой, я действительно не знаю, что делать дальше -
Клиент -
Socket clientSocket = null;
DataOutputStream os = null;
BufferedReader is = null;
String request;
String responseLine;
String data;
try {
clientSocket = new Socket("LocalHost", 5000);
os = new DataOutputStream(clientSocket.getOutputStream());
is = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
} catch (UnknownHostException e) {
System.err.println("Dont know host name!");
}
catch (IOException e) {
System.err.println("Couldnt get I/O for connection");
}
if (clientSocket != null && os != null && is != null) {
try {
request = "Hello Server \n";
os.writeBytes(request);
System.out.println("Client: " + request);
if ((responseLine = is.readLine()) != null){
System.out.println("SERVER: " + responseLine);
}
//os.close();
//is.close();
//clientSocket.close();
}
catch (UnknownHostException e) {
System.err.println("Trying to connect to unknown host: " + e);
} catch (IOException e) {
System.err.println("IOException: " + e);
}
}
Сервер -
ServerSocket service = null;
Socket server = null;
BufferedReader is;
DataOutputStream os;
String line;
try {
service = new ServerSocket(5000, 2);
} catch (IOException e) {
System.out.println(e);
}
try {
server = service.accept();
is = new BufferedReader(new InputStreamReader(server.getInputStream()));
os = new DataOutputStream(server.getOutputStream());
if ( (line = is.readLine()) != null) {
String text = is.toString();
System.out.println("Data: " + text);
}
os.close();
is.close();
server.close();
}
catch (IOException e) {
System.out.println(e);
}
Вы ничего не назначили на request
.
Если у вас есть, вне кода, который вы опубликовали, он не содержит терминатора строки, поэтому вы читаете строки, но не пишете строки.
Вы смешиваете потоки с читателями и писателями.
Вы перехватываете исключения, а затем продолжаете действовать так, как будто их не произошло. Код, который зависит от успеха кода в предыдущем блоке try
, должен находиться внутри того же блока try
.