मेरे पास एक साधारण क्लाइंट सर्वर प्रोग्राम है। सर्वर एकाधिक ग्राहकों से कनेक्शन स्वीकार कर सकते हैं। वर्तमान में यह मेरे क्लाइंट में क्या हो रहा है।
1) ग्राहक में सूची टाइप करें। सर्वर क्लाइंट को वर्तमान निर्देशिका में सभी फाइलें वापस भेज देगा। 2) क्लाइंट में "हैलो" टाइप करें। सर्वर को "हैलो" वापस भेजना चाहिए। हालांकि, ग्राहक में ग्राहक खाली पढ़ता है।
मैं ग्राहक में "QUIT" दर्ज करता हूं। मैं केवल सर्वर से हैलो संदेश वापस देखता हूं।
मैं यह नहीं समझ सकता कि ग्राहक सर्वर द्वारा वापस भेजे जाने के बाद हैलो संदेश क्यों नहीं पढ़ता है।क्लाइंट सॉकेट सर्वर सॉकेट से डेटा के लिए प्रतीक्षा कैसे करें
क्लाइंट कोड
import java.net.*; // Contains Socket classes
import java.io.*; // Contains Input/Output classes
import java.nio.CharBuffer;
class ClntpracticeSandbox{
public static void main(String argv[]){
try{
//
Socket client=new Socket("localhost", 7777);
System.out.println("Connected to server " + client.getInetAddress()
+ ": " + client.getPort());
System.out.println("local port is " + client.getLocalPort());
BufferedReader kbreader;
BufferedWriter writer;
BufferedReader reader;
kbreader = new BufferedReader(new InputStreamReader(System.in));
writer = new BufferedWriter(new OutputStreamWriter(client.getOutputStream()));
reader = new BufferedReader(new InputStreamReader(client.getInputStream()));
String data = "", datakb, line=null;
do{
System.out.print("Text to the server? ");
datakb = kbreader.readLine();
writer.write(datakb);
writer.newLine();
writer.flush();
System.out.print("Received from the Server: ");
line = reader.readLine();
while (line.equals("")==false){
System.out.println(line);
line = reader.readLine();
}
} while (datakb.trim().equals("QUIT")==false);
client.close();
System.exit(0);
}catch(Exception e){
System.err.println("Exception: " + e.toString());
}
}
}
सर्वर कोड
import java.net.*; // Contains Socket classes
import java.io.*; // Contains Input/Output classes
import java.nio.file.*;
class SrvrpracticeSandbox{
public static void main(String argv[]) throws IOException {
ServerSocket s = new ServerSocket(7777);
System.out.println("Server waiting for client on port " + s.getLocalPort());
int count = 0;
do {
count = count + 1;
Socket connected = s.accept();
new clientThread(connected, count).start();
} while (true);
}
}
class clientThread extends Thread {
Socket myclientSocket = null;
int mycount;
DataInputStream is = null;
PrintStream os = null;
public clientThread(Socket clientSocket, int count) {
this.myclientSocket = clientSocket;
this.mycount = count;
}
public void run() {
try {
System.out.println("New connection accepted " + myclientSocket.getInetAddress() + ": " + myclientSocket.getPort());
BufferedReader reader;
BufferedWriter writer;
reader = new BufferedReader(new InputStreamReader(myclientSocket.getInputStream()));
writer = new BufferedWriter(new OutputStreamWriter(myclientSocket.getOutputStream()));
String data;
String testdirectory = "file1.txt\nfile2.txt\nfile3.txt";
do{
data = reader.readLine();
System.out.println("Received from " +mycount + ":" + data);
if (data.equals("LIST")) {
writer.write(mycount + "\n"+"150 - Transfer Initiated."+"\n"+
"DATA " +returnDirectoryList().getBytes().length + "\n" +
returnDirectoryList() + "\r\n");
} else {
writer.write("Server Echos to " + mycount + ":"+ data + "\n"+"This is a new line."+"\r\n");
}
writer.newLine();
writer.flush();
}while (data.equals("QUIT") == false);
myclientSocket.close();
System.exit(0);
} catch (IOException ex) {
}
}
private String returnDirectoryList()
{
String files = "";
Path dir = Paths.get(".");
try {
DirectoryStream<Path> stream =
Files.newDirectoryStream(dir);
for (Path file: stream) {
files = files + file.getFileName() +"\n";
}
} catch (IOException | DirectoryIteratorException x) {
System.err.println("returnDirectoryList "+x.toString());
}
return files;
}
}
हैलो पीटर मैं चाहता हूं कि क्लाइंट क्लाइंट से प्रसंस्करण अनुरोध जारी रखे जब तक क्लाइंट QUIT भेजता है। जब क्लाइंट सर्वर से अनुरोध पढ़ता है तो मुख्य मुद्दा ग्राहक पक्ष पर होता है। क्लाइंट से भेजे गए QUIT को छोड़कर अनुरोध के लिए क्लाइंट सर्वर से "" पढ़ता है। – shresthaal
ऊपर कोड और आउटपुट देखें –