Я пытаюсь понять тему создания сетей, написав java-программы (обучение на практике). Я написал клиент и сервер в java, используя java.net.Socket. Клиент - это класс, а сервер - класс. Затем я создал два класса в одном Main-классе. Приложение java запускается на моем компьютере. Когда я назначаю один и тот же порт клиенту и серверу, тогда я не получаю ошибки (например: порт 80). Но когда я назначаю разные порты (например, порт 80 на сервер и порт 9090 для клиента), я получаю сообщение об ошибке. Должен ли я использовать тот же порт для tcp-соединения? Я хочу понять, почему я получаю сообщение об ошибке. здесь весь мой код положить в одном Java-пакет:Должен ли я использовать один и тот же порт для подключения к серверу-клиенту tcp
package client_server;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.*;
import java.util.Date;
public class Server {
ServerSocket server;
Server(){
System.out.println("server starts");
try{
//server runs on port 9090
server=new ServerSocket(9090);
}catch(IOException e){
e.printStackTrace();
}
}
void listen(){
Socket socket = null;
try {
System.out.println("server is listining");
socket=server.accept();
PrintWriter out =new PrintWriter(socket.getOutputStream(), true);
out.println(new Date().toString());
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
package client_server;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.io.PrintWriter;
import java.net.*;
public class Client {
Socket clientSocket;
Client(){
System.out.println("Client starts");
final String server_ip_adress="127.0.0.1";
try {
clientSocket = new Socket(server_ip_adress,80);
} catch (IOException e) {
e.printStackTrace();
}
}
void connectToServer(){
try{
System.out.println("client connects to server");
InputStream clientInput=clientSocket.getInputStream();
BufferedReader input = new BufferedReader(new InputStreamReader(clientInput));
String answer = input.readLine();
System.out.println(answer);
}catch(IOException e){
e.printStackTrace();
}
}
}
package client_server;
public class Main {
public static void main(String [] args){
Server server = new Server();
Client client = new Client();
server.listen();
client. connectToServer();
}
}
Теоретически это должно работать, потому что каждый процесс (серверный процесс и клиент процесс) будет назначен порт, и не имеет значения, происходит ли межпроцессное взаимодействие на разных портах.
Но в моем случае у меня есть один процесс. Поэтому, когда я назначаю разные порты, он выдает ошибку. Правильно ли мой анализ? Я получаю эту ошибку: Адрес уже используется: JVM_Bind
Возможно, вы захотите ознакомиться с основами сокетов. Вы также можете указать соответствующий код и фактические сообщения об исключениях. В основном сервер _listens_ на порту, клиент _connects_ на тот же порт. – CodeCaster
Вы не можете использовать один и тот же порт на одном и том же IP-адресе, что делает ваше заявление о том, что трудно поверить. Без кода мы не можем ответить. Закрытие пока. – usr
У меня есть основы (теоретический фон), но я никогда не писал программы по этим темам. Итак, я делаю это сейчас: :) – amitakCs