Я новичок в сетевой связи, и я пытаюсь создать клиент-серверное приложение.Соединение сокетов TCP
protected void init(){
Server myServer = new Server();
Client myClient = new Client();
}
Это мой класс Клиент:
public class Client {
public Client() {
init();
}
private void init() {
Socket echoSocket = null;
DataOutputStream os = null;
DataInputStream is = null;
DataInputStream stdIn = new DataInputStream(System.in);
try {
echoSocket = new Socket("localhost", 1234);
os = new DataOutputStream(echoSocket.getOutputStream());
is = new DataInputStream(echoSocket.getInputStream());
os.writeInt(stdIn.readInt());
echoSocket.getOutputStream().close();
echoSocket.getInputStream().close();
echoSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
И это сервер:
public class Server {
public Server() {
init();
}
private void init() {
try {
boolean run = true;
ServerSocket ss = new ServerSocket(1234);
Socket s = ss.accept();
DataInputStream dis = new DataInputStream(s.getInputStream());
System.out.println(dis.readInt());
s.getInputStream().close();
s.getOutputStream().close();
s.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Прежде всего: Могу ли я инициализировать клиент и сервер просто, как я сделал? new Server()
и new Client()
?
Вопрос 2: Важно ли то, что я инициализирую сначала? клиент или сервер?
Вопрос 3: Когда я скомпилирую этот код с первым инициализированным клиентом, я становлюсь Connection refused: connect
. Я знаю, это означает, что на порту, к которому вы пытаетесь подключиться, нет прослушивающего сокета. Вот почему сервер должен идти первым, я думаю. Это так? могу ли я исправить это с помощью setSoTimeout
и как?
Вопрос 4: Когда я скомпилирую его с сервером, а затем с клиентом, вывод ничего. И я думаю, что это не имеет ничего общего с клиентом, потому что, если я пытаюсь напечатать «1», например, он тоже не работает. Я думаю, что он просто ждет клиента и ничего не делает после этого. Как я могу это исправить? может быть, setSoTimeout
тоже идет?