Привет, я новичок в java-соке, и я пытаюсь создать серверный сокет. Может кто-то, пожалуйста, скажите мне, где я ошибаюсь, потому что я получаю сообщение об ошибке "Адрес уже используется". Иногда я не получаю сообщение об ошибке, но вместо этого он просто не образует соединение. Помоги пожалуйста? Здесь класс сервера и класс клиента.
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.net.ServerSocket;
import java.net.Socket;
public class MessageServer {
public static void main(String[] args) throws IOException{
int port = 8080;
//int port = Integer.parseInt(args[0]);
ServerSocket server = new ServerSocket(port);
while(true){
System.out.println("Waiting for client...");
Socket client = server.accept();
System.out.println("Client from " + client.getInetAddress() + " connected.");
BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
String inputLine = in.readLine();
System.out.println("Client said: '"+inputLine+"'");
Writer count = new BufferedWriter(new OutputStreamWriter(client.getOutputStream()));
byte c [] = count.toString().getBytes();
count.flush();
}
}
}
import java.net.*;
import java.io.*;
public class MessageSendClient {
public static void man(String args[]) throws IOException{
Socket server1 = new Socket("143.210.72.82", 8080);
System.out.println("Connected to " + server1.getInetAddress());
InputStream in = server1.getInputStream();
byte c[] = new byte[100];
int num = in.read(c);
String count = new String(c);
System.out.println("Server said: " + count);
}
}
если вы находитесь в Linux 8080/80/8443, нет хороших портов для нас другого порта, такого как 3456. И всегда всегда закройте свой сокет от вашего Клиента.
Обновление: прежде всего, вы не должны закрывать сокет сервера с помощью Server.close(), сервер должен работать. и вот почему в то время есть Loops. вы должны закрыть свой клиентский сокет с помощью socket.close() после того, как вы получите входной поток от сервера. Помните также, чтобы всегда закрывать выходной поток с помощью Close() после write() и flush(), чтобы избежать побочного эффекта. Сделайте два класса: один для Сервера и один для Клиента. Сначала запустите Java class Server, а затем запустите свой клиентский класс для подключения к серверу. завершите работу своего класса Client и запустите его снова. если вы используете eclipse, также завершайте клиент в консоли. иногда процессы Java накладываются друг на друга, поэтому просто завершайте весь запущенный процесс с помощью кнопки x. После того как вы улучшили свои примеры кода, вы можете снова запустить сервер и клиентский класс. Если он все еще не работает, вам необходимо повторно отправить свой вопрос и показать свои текущие коды в разделе "Сведения для клиента и сервера". почему-то я потерял трек, где ваше текущее состояние, потому что вы уже одобрили ответ на свой вопрос.
Попробуйте новый порт. Я бы не использовал 8080, поскольку он может быть (и, вероятно, уже использован). Также старайтесь всегда закрывать сокет после его использования.
Поскольку я сам использовал сокеты для университетских целей, вот код (если вам нужен UDP или RMI, я тоже могу опубликовать их)
public class TCPClient {
public static void main(String[] args){
try{
Socket socket = new Socket("127.0.0.1", 6666);
PrintWriter data_to_server = new PrintWriter(socket.getOutputStream(), true);
BufferedReader data_from_server =
new BufferedReader(
new InputStreamReader(socket.getInputStream()));
//Schicke Nachricht an Server
BufferedReader system_reader = new BufferedReader(new InputStreamReader(System.in));
long start_send = System.nanoTime();
String msg = system_reader.readLine();
data_to_server.println(msg);
//Erhalte jeweilige Antwort
msg = data_from_server.readLine();
System.out.println("Data from Server : " + msg);
System.out.println("Timespan: " + (System.nanoTime()-start_send));
socket.close();
}catch(IOException ioe){
ioe.printStackTrace();
}
}
}
public static void main(String[] args) {
try {
TCPServer tcp = new TCPServer();
tcp.initialize(6666);
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
public void initialize(int port) throws IOException {
// Erstellen eines Server Sockets
ServerSocket server = new ServerSocket(port);
while (true) {
// Warten bis die Verbindung besteht
System.out.println("Waiting for client to connect...");
Socket socket = server.accept();
// Writer für die ausgehende Antwort
PrintWriter data_to_client = new PrintWriter(
socket.getOutputStream(), true);
// Reader für die ankommende Nachricht
BufferedReader data_from_client = new BufferedReader(
new InputStreamReader(socket.getInputStream()));
// IP-Adresse des Clients
InetAddress remoteIp = socket.getInetAddress();
// Erhalten der Nachricht
String msg = data_from_client.readLine();
System.out.println("Client " + remoteIp + " : " + msg);
// Versenden der Antwort
send(data_to_client, msg);
}
}
}
не используйте свой IP-адрес, а используйте localhost или 127.0.0.1, а также попробуйте новый порт, попробуйте использовать порт более 1024 (большинство из этого числа - это хорошо известный порт, и они зарегистрированы в IANA)
143.210.72.82
и не используйте порт 8080, который уже используется для других целей.