我正在編寫Socket程序,此處客戶端通過流發送字符串,服務器對其進行處理並寫回客戶端。我的問題是,服務器進程String
後,它寫回流,但在客戶那可不一定能讀取流的顯示異常,因爲Exception in while: java.net.SocketException: socket closed
這裏是我的代碼,如何保持Socket連接,直到服務器處理它?
客戶端,
public void run() {
while (true) {
try {
// Open your connection to a server, at port 1231
s1 = new Socket("localhost", 1231);
OutputStream s1out = s1.getOutputStream();
DataOutputStream dos = new DataOutputStream(s1out);
InputStream in=s1.getInputStream();
DataInputStream dis=new DataInputStream(in);
String s = br.readLine();
dos.writeUTF(s);
dos.flush();
dos.close();
System.out.println(dis.readUTF());//it is the String from Server after processing
dis.close();
} catch (IOException ex) {
// Logger.getLogger(SimpleClient.class.getName()).log(Level.SEVERE, null, ex);
System.out.println("Exception in while: " + ex);
}
}
在服務器
public void run()
{
while(true){
try {
System.out.println("Waiting for connect to client");
s1=serverSocket.accept();
s1In = s1.getInputStream();
dis = new DataInputStream(s1In);
out=s1.getOutputStream();
dos=new DataOutputStream(out);
String clientData=dis.readUTF();
//processing task String
dos.writeUTF("Bus Registered Successfully");
dos.flush();
}
}
在這裏,我不能夠在客戶端讀取Bus Registered Successfully
。如何解決這個問題。?
非常感謝。 。 – Raghu
是否可以,如果我寫'serverSocket.accept();'while while循環之前? ,但我的需求是客戶端可以隨時發送數據,所以服務器應該可以隨時接受它。 – Raghu
檢查更新的答案。 'serverSocket.accept();'不應該是'run'方法的一部分(至少如果你想要多個客戶端服務器)。 – Junaid