2011-12-14 238 views
0

下面的代碼應該從套接字接收一個時間,將時間添加6個月並將其返回到套接字。這裏是初始化插座和服務器的代碼:在套接字和服務器套接字之間發送和接收信息

//open and connect the sockets 
    ServerSocket ss = new ServerSocket(4444); 
    System.out.println("1"); 
    Socket sock = new Socket(ss.getInetAddress(),4444); 
    System.out.println("2"); 
    Socket srv = ss.accept(); 
    System.out.println("3"); 

這裏是示出服務器接收的時間並添加6個月至它(的時間格式是YYYYMMDDHHMMSS)的代碼。

//send/receive and increment the current time by 6 months 
    PrintWriter bw = new PrintWriter(sock.getOutputStream()); 
    System.out.println("4"); 
    bw.print(rtime); 
    System.out.println("5"); 
    //add 6 months to the current time 
    long ret = Long.valueOf(new BufferedReader(new InputStreamReader(srv.getInputStream())).readLine()) + 600000000; 
    System.out.println("6"); 

變量rtime是已經聲明的long。該代碼是

catch(Exception e) { 
     System.out.println(e); 
     System.exit(-1); 
    } 

我把印刷線路中的代碼,看看那裏的錯誤發生時,由於某種原因,該程序將終止,而不打印錯誤try{}跟隨內。所有數字都會打印出來,直到「6」。換句話說,在.readline()線路上遇到錯誤。我不知道我做錯了什麼。任何幫助非常感謝,謝謝。

+0

我覺得有必要指出,將該格式的日期/時間作爲一個簡單的數字處理,並將其添加6個月將會在原始月份(MM)> 06時產生無效日期。將時間轉換爲[epoch時間](http://en.wikipedia.org/wiki/Unix_time),然後像這樣做。請參閱[Date.getTime()](http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Date.html#getTime())和[SimpleDateFormat](http:/ /docs.oracle.com/javase/1.5.0/docs/api/java/text/SimpleDateFormat.html) – Jiddo

+0

尷尬,我沒有意識到,另一種解決方案是: 公共長增量BYSIX(長ret){ long tmp = Long.valueOf(「10000000000」); long tmp2 = ret%tmp; long tmp3 = ret - tmp2; if(tmp2> Long.valueOf(「699999999」))tmp3 + = Long.valueOf(「10000000000」); long tmp4 = ret%tmp; long tmp5 = Long.valueOf(「600000000」); long tmp6 = tmp4 + tmp5; long tmp7 = Long.valueOf(「1200000000」); long tmp8 = tmp6%tmp7; if(tmp6%tmp7 Pinkesz

回答

1

請添加

bw.flush();

bw.print(rtime);

這是必需的,以沖洗來自客戶端套接字的輸出流的內容然後這將是可在服務器套接字的輸入。

否則,在你的例子中readline();不會出來,因爲它是一個阻塞的電話。

+1

+1:在flush()之前,你還需要發送一個換行符,或者readLine()不會返回。 –

+0

@Pramod K P爲什麼它沒有拋出異常呢? – Pinkesz

相關問題