我試圖通過與一個客戶端和服務器的套接字聊天工作。我已經成功地運行了它,因爲服務器能夠來回傳遞消息,但是當我嘗試使服務器端實現稍微複雜一些時,添加命令等,客戶端可以使用,通信失敗。它看起來可能會不同步,即使反覆使用相同的命令可能產生不同的結果,即使我在每個命令之後刷新了所有內容。Java套接字聊天不顯示所有消息
簡單輸出的例子,這正常工作,每次:
客戶:
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();
}
}
}
我得到的輸出是這樣,它的工作原理每次只吐出它:
Type whatever you want: login
Server says: login
Type whatever you want: login
Server says: login
Type whatever you want: login
Server says: login
Type whatever you want: login
Server says: login
但是,當我做服務器端更復雜一點用以下替換其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:
同樣,在沒有從服務器回來注意到空白,然後即使命令中的更改也不會提示不同的響應。就好像它不同步一樣,只需使用一個附加功能?
似乎你的服務器端代碼是一樣的客戶端端? :)我猜錯了粘貼在那裏。 –
您已在'客戶端'和'服務器'下發布相同的代碼 –
@PeterButkovic已修復!對於那個很抱歉! – ZAX