有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

javasocket服务器没有连接

嗨,我是javasocket新手,我一直在尝试创建一个服务器socket。有人能告诉我哪里出了问题,因为我在说“地址已经在使用中”时出错了。有时我没有得到一个错误,但它只是没有形成一个连接。请帮忙?这是服务器类和客户机类

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);
}

}


共 (3) 个答案

  1. # 1 楼答案

    尝试一个新端口。我不会使用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);
        }
    }
    

    }

  2. # 2 楼答案

    如果您使用的是Linux 8080/80/8443,那么就不适合使用其他端口,比如3456。 始终关闭与客户的套接字

    更新: 首先,你不应该用服务器关闭服务器套接字。close(),服务器应该正在运行。这就是为什么有while循环。你应该用socket关闭你的客户端套接字。从服务器获取inputstream后关闭()。还记得在write()和flush()之后始终使用Close()关闭输出流,以避免副作用。创建两个类,一个用于服务器,一个用于客户端。首先启动Java类服务器,然后运行客户端类连接到服务器。终止客户端类并再次运行它。如果您使用的是eclipse,也可以在控制台中终止客户端。有时Java进程是重叠的,所以只需使用x按钮终止所有正在运行的进程。改进示例代码后,可以再次启动服务器和客户端类。 如果仍不起作用,则需要再次转发问题,并详细显示客户端和服务器的当前代码。不知何故,我迷失了方向,你目前的状态在哪里,因为你已经批准了你问题的答案

  3. # 3 楼答案

    不要使用ip,而是使用localhost或127.0.0.1 还可以尝试一个新端口,尝试使用一个大于1024的端口(这个数字以下的大多数端口都是众所周知的端口,它们注册到IANA)