您好:
最近由于一个项目的需要,客户端发送一个请求数据,服务端接受以后根据数据做出不同的回。我用java写了一个服务端,请求方为C语言写的,我的服务端程序启动以后,一直处在等待状态没有任何的反映:接受不到请求发来的数据,客户端也接受不到我的回应。而且不报任何异常,问题是,我用JAVA写了一个客户端测试代码却一切正常,麻烦大哥给指点一二。谢谢,我写的服务器端代码和做测试用的客户端代码如下:
SERVER:
import java.net.*;
import java.io.*;
class testserver1 implements Runnable
{
Socket s;
public testserver1(Socket s)

this.s=s;
}
public void run(){
 try{
   InputStream ips=s.getInputStream();
   OutputStream ops=s.getOutputStream();
   BufferedReader br=new BufferedReader(new InputStreamReader(ips));
   DataOutputStream dos=new DataOutputStream(ops);
   PrintWriter out;
   while(true){
      System.out.println("已进入循环!!"); 
    String strword=br.readLine();
      //br.flush();
     System.out.println(strword);
     //if(strword.equalsIgnoreCase("quit"))
     // break;
    //String strecho=(new  StringBuffer(strword).reverse()).toString();
//////////////以下代码由于我怀疑是IO的原因,所以我用了各种输出形式结果失败
    dos.writeBytes("Init_ok1"+"\n");//回应1
      System.out.println("已成功回应了1"); 
      //dos.flush();
      ops.write("Init_ok2".getBytes());//回应2
      ops.flush();
       System.out.println("已回应了2"); 
     out = new PrintWriter(ops,true);
     out.println("Init_ok3"+"\n"); //回应3
       System.out.println("已回应了3"); 
     out.flush();
      out.close(); 
    break;
    //destroy();
    //stop();
         }
  br.close();
  dos.close();
  s.close();
}
 catch(NoRouteToHostException ex3) //无法到达远程主机,原因是防火墙干扰或者中间路由器停机。
{
 try{
     InputStream ips=s.getInputStream();
      OutputStream ops=s.getOutputStream();
      BufferedReader br=new BufferedReader(new InputStreamReader(ips));
       DataOutputStream dos=new DataOutputStream(ops);
       dos.writeBytes("Init_Fail");
                 }
      catch(Exception xe){}
            ex3.fillInStackTrace();
          System.out.println("failed");
 
 }
 catch(SocketTimeoutException e2){ //处理超时异常
 
 try{
     InputStream ips=s.getInputStream();
   OutputStream ops=s.getOutputStream();
   BufferedReader br=new BufferedReader(new InputStreamReader(ips));
   DataOutputStream dos=new DataOutputStream(ops);
    dos.writeBytes("Init_Fail--->out_times");
         }
      catch(Exception xe){}
            e2.fillInStackTrace();
         System.out.println("failed");
 
     }       
catch(SocketException e1){ //处理底层协议异常
          try{
     InputStream ips=s.getInputStream();
   OutputStream ops=s.getOutputStream();
   BufferedReader br=new BufferedReader(new InputStreamReader(ips));
   DataOutputStream dos=new DataOutputStream(ops);
    dos.writeBytes("Init_Fail-->xieyicuowu");
     }
      catch(Exception xe){}
            e1.fillInStackTrace();
             System.out.println("failed");
 
          }
catch(Exception e3){
 try{
     InputStream ips=s.getInputStream();
   OutputStream ops=s.getOutputStream();
   BufferedReader br=new BufferedReader(new InputStreamReader(ips));
   DataOutputStream dos=new DataOutputStream(ops);
    dos.writeBytes("Init_Fail");
     }
      catch(Exception xe){
            xe.fillInStackTrace();}
          
  e3.printStackTrace();
   System.out.println("failed");
 
}
 }
}
  class testserver2{
    public static void main(String arsgs[]){
    try{
     ServerSocket ss=new ServerSocket(20000);
     while(true){
           System.out.println("Waiting   for   conncetion..."); 
         Socket s=ss.accept();
            System.out.println("已经接受到请求连接"); 
         new Thread(new testserver1(s)).start();
      }
     }
     catch(Exception e)
     {
     e.printStackTrace();
     }
}
}
注请求的客户端的C代码我还没有见,是别人写的。写C的那个人说,他用C写了一个服务器端的代码来测试他的请求客户端,结果是正常的,我都晕了。。请教大哥

解决方案 »

  1.   

    再注:到目前为止,我还没有见请求方的C的代码,因为不是我写的啊。但写C的那个人说,他用C写了一个服务器代码去测试他的客户端代码,结果是正常的。我都晕了。。
      

  2.   

    刚测试过了,在我机子上用抓包工具,可以接受到对方请求发来的数据,而我的服务却仍然接受不到请求的数据。请指点。
    也就是可以连上,也走了ACCPET,就是接收不到数据。不知道输入输出流的问题,不知道JAVA和C有什么区别?