Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.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
Java套接字聊天未显示所有消息_Java_Sockets_Chat_Sync - Fatal编程技术网

Java套接字聊天未显示所有消息

Java套接字聊天未显示所有消息,java,sockets,chat,sync,Java,Sockets,Chat,Sync,我正试图通过一个套接字与一个客户端和服务器聊天。我成功地运行了它,因为服务器能够来回传递消息,但当我试图使服务器端实现更复杂一些,添加命令等,以便客户端可以使用时,通信失败。看起来它可能会失去同步,即使反复使用相同的命令会产生不同的结果,即使我在每个命令之后刷新所有内容 这是一个简单化输出的示例,每次都能按预期工作: 客户: import java.io.*; import java.net.*; public class Test1Client { public static void ma

我正试图通过一个套接字与一个客户端和服务器聊天。我成功地运行了它,因为服务器能够来回传递消息,但当我试图使服务器端实现更复杂一些,添加命令等,以便客户端可以使用时,通信失败。看起来它可能会失去同步,即使反复使用相同的命令会产生不同的结果,即使我在每个命令之后刷新所有内容

这是一个简单化输出的示例,每次都能按预期工作:

客户:

import java.io.*;
import java.net.*;

public class Test1Client
{
public static void main(String args[])
{


    InputStreamReader convert = new InputStreamReader(System.in);
    BufferedReader stdin = new BufferedReader(convert);

    try
    {
        Socket echoClient = new Socket("localhost", 17);
        PrintStream outs = new PrintStream(echoClient.getOutputStream());
        BufferedReader ins = new BufferedReader(new InputStreamReader(echoClient.getInputStream()));
        while(true){
        System.out.print("Type whatever you want: ");
        String line = stdin.readLine();
        outs.println(line);
        System.out.println("Server says: " + ins.readLine());
        }

    }
    catch (IOException e)
    {
        System.out.println(e);
    }
}
}
服务器:

import java.net.*;
import java.util.ArrayList;
import java.io.*;


public class Test1Server
{
    public static void main(String args[])
    {
        try
        {
             ServerSocket socket= new ServerSocket(12167);
             //Try not to use port number < 2000. 
             System.out.println("Waiting for a client to connect..."); 
             Socket s = socket.accept();
            System.out.println("Client Connected.");
            BufferedReader ins = new BufferedReader(new InputStreamReader(s.getInputStream()));
            PrintStream outs = new PrintStream(s.getOutputStream());                 

      while (true)
             {

            String line = ins.readLine();
            outs.println(line); 

        }

    }
    catch (IOException e)
        {
            e.getStackTrace();
         }
    }
}
但是,当我将服务器端的
while(true)
块替换为以下内容,从而使服务器端变得更加复杂时,我会得到一个更加混乱的结果:

                String line = ins.readLine();
                String response = manager.process(line);
                outs.println(response); 
                outs.flush();
过程:

msg= "User logged in successfully \n";
return msg;
您还会注意到流程命令代码中的一些注释行。当我返回一条简单的消息时,服务器似乎会跟上,但当我同时使用登录功能时,它会给出如下可怕的输出:

Type whatever you want: login ryanne 
Server says: ryanne logged in successfully 
Type whatever you want: login ryanne 
Server says: 
Type whatever you want: login ryanne 
Server says: You may already be logged in or did not use correct username or password 
Type whatever you want: login ryanne 
Server says: 
Type whatever you want: newuser jeff 
Server says: You may already be logged in or did not use correct username or password 
Type whatever you want: newuser jeff 12345
Server says: 
Type whatever you want: new user jeff 12345
Server says: You may already be logged in or did not use correct username or password 
Type whatever you want: 

同样,请注意空白处没有从服务器返回任何内容,然后即使命令中的更改也不会提示不同的响应。仅仅使用一个附加功能,它就好像失去了同步?

也许,您发送的数据没有刷新。使用
out.flush()在<代码>输出之后。println(行)
或将其构造函数调用更改为
PrintStream(echoClient.getOutputStream(),true)(打印新行时启用自动刷新)

可能是因为您发送的数据未刷新。使用
out.flush()在<代码>输出之后。println(行)
或将其构造函数调用更改为
PrintStream(echoClient.getOutputStream(),true)(打印新行时启用自动刷新)

可能是因为您发送的数据未刷新。使用
out.flush()在<代码>输出之后。println(行)
或将其构造函数调用更改为
PrintStream(echoClient.getOutputStream(),true)(打印新行时启用自动刷新)

可能是因为您发送的数据未刷新。使用
out.flush()在<代码>输出之后。println(行)
或将其构造函数调用更改为
PrintStream(echoClient.getOutputStream(),true)
(打印新行时启用自动刷新)

在某些字符串的末尾有一些
“\n”
。 如果您同时放置
“\n”
并使用
println
,您将得到双回车,这将破坏您的协议。删除
“\n”
,它会工作得更好。

在某些字符串的末尾有一些
“\n”
。 如果您同时放置
“\n”
并使用
println
,您将得到双回车,这将破坏您的协议。删除
“\n”
,它会工作得更好。

在某些字符串的末尾有一些
“\n”
。 如果您同时放置
“\n”
并使用
println
,您将得到双回车,这将破坏您的协议。删除
“\n”
,它会工作得更好。

在某些字符串的末尾有一些
“\n”


如果您同时放置
“\n”
并使用
println
,您将得到双回车,这将破坏您的协议。删除
“\n”
,它会工作得更好。

您的服务器端代码似乎与客户端代码相同?:)我猜粘贴错误。你在“客户端”和“服务器”下发布了相同的代码@PeterButkovic修复了!对不起!您的服务器端代码似乎与客户端代码相同?:)我猜粘贴错误。你在“客户端”和“服务器”下发布了相同的代码@PeterButkovic修复了!对不起!您的服务器端代码似乎与客户端代码相同?:)我猜粘贴错误。你在“客户端”和“服务器”下发布了相同的代码@PeterButkovic修复了!对不起!您的服务器端代码似乎与客户端代码相同?:)我猜粘贴错误。你在“客户端”和“服务器”下发布了相同的代码@PeterButkovic修复了!对不起!在替换代码中,对于服务器,我的更“复杂”的版本,如果你想替换while循环,我会按照你的建议使用outs.flush(),不是吗?虽然没有发布,但我也有一个稍微复杂一点的客户端版本,其中包括outs.flush()方法:/还有其他想法或方法吗?这让我抓狂在替换代码中,对于服务器,我的更“复杂”的版本如果你愿意,在我替换while循环的地方,我使用outs.flush()作为你的建议,不是吗?虽然没有发布,但我也有一个稍微复杂一点的客户端版本,其中包括outs.flush()方法:/还有其他想法或方法吗?这让我抓狂在替换代码中,对于服务器,我的更“复杂”的版本如果你愿意,在我替换while循环的地方,我使用outs.flush()作为你的建议,不是吗?虽然没有发布,但我也有一个稍微复杂一点的客户端版本,其中包括outs.flush()方法:/还有其他想法或方法吗?这让我抓狂在替换代码中,对于服务器,我的更“复杂”的版本如果你愿意,在我替换while循环的地方,我使用outs.flush()作为你的建议,不是吗?虽然没有发布,但我也有一个稍微复杂一点的客户端版本,其中包括outs.flush()方法:/还有其他想法或方法吗?我简直要发疯了,真不敢相信这就是问题所在!非常感谢你!我不知道println的警告!真不敢相信这就是问题所在!非常感谢你!我不知道println的警告!真不敢相信这就是问题所在!非常感谢你!我不知道println的警告!真不敢相信这就是问题所在!非常感谢你!我不知道println的警告!
Type whatever you want: login ryanne 
Server says: ryanne logged in successfully 
Type whatever you want: login ryanne 
Server says: 
Type whatever you want: login ryanne 
Server says: You may already be logged in or did not use correct username or password 
Type whatever you want: login ryanne 
Server says: 
Type whatever you want: newuser jeff 
Server says: You may already be logged in or did not use correct username or password 
Type whatever you want: newuser jeff 12345
Server says: 
Type whatever you want: new user jeff 12345
Server says: You may already be logged in or did not use correct username or password 
Type whatever you want: