Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Can';t通过套接字发送多条消息_Java_Sockets - Fatal编程技术网

Java Can';t通过套接字发送多条消息

Java Can';t通过套接字发送多条消息,java,sockets,Java,Sockets,我想做一个小小的聊天系统。我有一个控制台和一个客户端。现在,只有客户端需要向控制台发送消息。我可以成功连接到服务器,并且可以从客户端向控制台发送一条消息。故障在发送第一条消息后开始。当第一条消息出现时,我无法发送任何其他消息 我不知道是控制台不读取消息,还是客户端不发送消息。在这种情况下,我如何排除故障 public class ClientMainClass { private static Socket socket; public static void main(String arg

我想做一个小小的聊天系统。我有一个控制台和一个客户端。现在,只有客户端需要向控制台发送消息。我可以成功连接到服务器,并且可以从客户端向控制台发送一条消息。故障在发送第一条消息后开始。当第一条消息出现时,我无法发送任何其他消息

我不知道是控制台不读取消息,还是客户端不发送消息。在这种情况下,我如何排除故障

public class ClientMainClass {


private static Socket socket;
public static void main(String args[]) {
    try {

        String host = "localhost";
        int port = 25000;
        InetAddress address = InetAddress.getByName(host);
        socket = new Socket(address, port);

        Scanner scanner = new Scanner(System.in);
        System.out.println("Skriv dit username:");
        String name = scanner.nextLine();
        System.out.println("Du er logget ind som: " + name);
        String input;

        do{
            input = scanner.nextLine();
            if (input.equalsIgnoreCase("exit")) {
                System.out.println("Du forlod serveren");
                socket.close();
                continue;
            }else {
                /*OutputStream os = socket.getOutputStream();
                OutputStreamWriter osw = new OutputStreamWriter(os);
                BufferedWriter bw = new BufferedWriter(osw);*/
                PrintWriter printWriter = new PrintWriter(socket.getOutputStream(),true);
                Date date = new Date();
                String time = date.getDate()+"/"+date.getMonth()+":"+date.getHours()+":"+date.getMinutes();
                //Send the message to the server
                String message = time+ " - " + name + ": "+input;
                printWriter.println(message);
                System.out.println(message);
                continue;
            }
        }while (!(input.equals("exit")));
    } catch (Exception exception) {
        exception.printStackTrace();
    } finally {
        //Closing the socket
        try {
            socket.close();
        } catch(Exception e) {
            e.printStackTrace();
        }
    }
}
}
我的服务器:

public class Main{

private static Socket socket;

public static void main(String[] args) {


    try {

        int port = 25000;
        ServerSocket serverSocket = new ServerSocket(port);
        System.out.println("Server Started and listening to the port 25000");

        while(true) {
            //Reading the message from the client
            socket = serverSocket.accept();
            InputStream is = socket.getInputStream();
            InputStreamReader isr = new InputStreamReader(is);
            BufferedReader br = new BufferedReader(isr);
            System.out.println(br.readLine());
        }
    }
    catch (Exception e) {
        e.printStackTrace();
    } finally {
        try {
            socket.close();
        } catch(Exception e){}
    }
}
}

说清楚。我可以连接到服务器。我可以从客户端向控制台发送一条消息,但最多只能发送一条消息。

您从未读过第二行。您的服务器接受一个连接,从该连接中读取一行,然后等待一个新连接,丢弃可能到达第一个连接的所有内容

但是,您的客户机使用第一个(也是唯一一个)连接发送所有输入,这是绝对正确的

这个具体问题可以这样解决:

while(true) {
  //Reading the message from the client
  socket = serverSocket.accept();
  InputStream is = socket.getInputStream();
  InputStreamReader isr = new InputStreamReader(is);
  BufferedReader br = new BufferedReader(isr);
  while(true){
    System.out.println(br.readLine());
  }
}
这将导致您的程序打印第一个连接上到达的所有内容,但它永远不会接受第二个连接


为了处理多个客户端,您需要一个
线程来处理每个客户端。

您从未读过第二行。您的服务器接受一个连接,从该连接中读取一行,然后等待一个新连接,丢弃可能到达第一个连接的所有内容

但是,您的客户机使用第一个(也是唯一一个)连接发送所有输入,这是绝对正确的

这个具体问题可以这样解决:

while(true) {
  //Reading the message from the client
  socket = serverSocket.accept();
  InputStream is = socket.getInputStream();
  InputStreamReader isr = new InputStreamReader(is);
  BufferedReader br = new BufferedReader(isr);
  while(true){
    System.out.println(br.readLine());
  }
}
这将导致您的程序打印第一个连接上到达的所有内容,但它永远不会接受第二个连接


为了处理多个客户端,您需要一个
线程来处理每个客户端。

很好,谢谢。我将socket.accpet()移到while循环之外,现在它可以工作了。谢谢。请记住,如果您不在循环中调用
accept
,您的服务器将只处理第一次连接,而不会处理任何其他连接。正确,但现在我只想进行一对一的聊天。很好,谢谢。我将socket.accpet()移到while循环之外,现在它可以工作了。谢谢。请记住,如果您不在循环中调用
accept
,您的服务器将只处理第一个连接,而不会处理任何其他连接。正确,但现在我只想进行一对一的聊天。