2011-12-14 208 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

相关问题