M在socket編程新... I HV創建一個從隊列中的客戶端存儲名稱& ID服務器,然後將其保存在另一個隊列客戶端提供的所有輸入。當客戶端寫入'測試'時,服務器檢索所有存儲的數據作爲客戶端類型的一些值,即整數...當客戶端類型'恢復'服務器再次開始存儲客戶端的給定輸入隊列...如果客戶端類型'退出'服務器發回客戶端的名稱和id並開始等待ne客戶端。接收這些信息並關閉套接字。服務器的客戶端套接字編程輸出困難
問題: m在從隊列中檢索數據時遇到問題。當我輸入退出時,我可以看到通過for循環回顧的名稱和ID。如果我把這一行outToClient.writeBytes(「Thank You!」+'\ n');在for循環之後,它會顯示客戶端的名稱& id,但客戶端工作正常。
中的if else條件同時檢查「測試」再次聲明,我在檢索數據面臨的問題。服務器要求整數..客戶類型一個整數,然後我不從服務器獲取數據。
這裏是我的代碼
服務器端:
import java.io.*;
import java.net.*;
import java.util.*;
class server
{
public static void main(String argv[]) throws Exception
{
String clientSentence;
String replySentence;
ServerSocket welcomeSocket= new ServerSocket(6789);
while(true)
{
System.out.println("#########Server Waiting#########");
Socket connectionSocket = welcomeSocket.accept();
BufferedReader inFromClient = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream()));
DataOutputStream outToClient = new DataOutputStream(connectionSocket.getOutputStream());
Queue<String> qe = new LinkedList<String>();
outToClient.writeBytes("Enter your Name and ID Please..."+'\n');
for(int i=0;i<=1;i++)
{
clientSentence = inFromClient.readLine();
qe.add(clientSentence);
}
outToClient.writeBytes("Thank you! You may now proceed further..."+'\n');
Queue<String> chatq = new LinkedList<String>();
clientSentence = inFromClient.readLine();
while(!clientSentence.equals("exit"))
{
if(clientSentence.equals("test"))
{
outToClient.writeBytes("Enter Integers to fetch data or 'resume' to continue..."+'\n');
clientSentence = inFromClient.readLine();
while(!clientSentence.equals("resume"))
{
replySentence = chatq.remove();
outToClient.writeBytes(replySentence+'\n');
clientSentence = inFromClient.readLine();
}
if(clientSentence.equals("resume"))
{
outToClient.writeBytes("You may now proceed again..."+'\n');
clientSentence = inFromClient.readLine();
}
}
else
{
chatq.add(clientSentence);
clientSentence = inFromClient.readLine();
}
}
if(clientSentence.equals("exit"))
{
outToClient.writeBytes("Client Name & ID: "+'\n');
for(int i=0;i<=1;i++)
{
replySentence = qe.remove();
outToClient.writeBytes(replySentence+'\n');
}
}
}
}
}
客戶端:
import java.io.*;
import java.net.*;
import java.util.*;
class client
{
public static void main(String argv[]) throws Exception
{
String sentence;
String modifiedSentence;
BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in));
InetAddress inetAddress=InetAddress.getLocalHost();
System.out.println(inetAddress);
Socket clientSocket = new Socket(inetAddress,6789);
while(true)
{
DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());
BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
modifiedSentence=inFromServer.readLine();
System.out.println("From Server: "+modifiedSentence+'\n');
for(int i=0;i<=1;i++)
{
sentence = inFromUser.readLine();
outToServer.writeBytes(sentence+'\n');
}
modifiedSentence=inFromServer.readLine();
System.out.println("From Server: "+modifiedSentence + '\n');
sentence = inFromUser.readLine();
while(!sentence.equals("exit"))
{
if(sentence.equals("test"))
{
outToServer.writeBytes(sentence+'\n');
modifiedSentence=inFromServer.readLine();
System.out.println("From Server: "+modifiedSentence + '\n');
sentence = inFromUser.readLine();
while(!sentence.equals("resume"))
{
outToServer.writeBytes(sentence+'\n');
modifiedSentence=inFromServer.readLine();
System.out.println("From Server: "+modifiedSentence + '\n');
sentence = inFromUser.readLine();
}
if(sentence.equals("resume"))
{
outToServer.writeBytes(sentence+'\n');
modifiedSentence=inFromServer.readLine();
System.out.println("From Server: "+modifiedSentence + '\n');
sentence = inFromUser.readLine();
}
}
else
{
outToServer.writeBytes(sentence+'\n');
sentence = inFromUser.readLine();
}
}
if(sentence.equals("exit"))
{
outToServer.writeBytes(sentence+'\n');
modifiedSentence=inFromServer.readLine();
System.out.println("From Server: "+modifiedSentence + '\n');
for(int i=0;i<=1;i++)
{
modifiedSentence=inFromServer.readLine();
System.out.println(modifiedSentence + '\n');
}
clientSocket.close();
break;
}
}
}
}
yea ...這是家庭作業nm試圖做到這一點... m不擅長java所以有困難.... m會去嘗試PrintWriter n讓你知道..thnx – ZoeHime
我只替換了dataoutputstream與PrintWriter一樣:PrintWriter outToClient = null; outToClient = new PrintWriter(connectionSocket.getOutputStream(),true);和數據打印的地方,如:outToClient.println(「謝謝你!你現在可以繼續......」+'\ n'); 現在有點慌亂,因爲輸出不是因爲它是...可以üPLZ有點或可能引用任何有用的鏈接?米檢查一些,但仍然我會很感激,如果你的幫助 – ZoeHime
你能用英語而不是文字說話嗎?你可以用你現在擁有的東西來更新你的代碼嗎? –