首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

关于java写socket服务和c写的客户端的通信,该如何解决

2011-12-30 
关于java写socket服务和c写的客户端的通信最近由于一个项目的需要,客户端发送一个请求数据,服务端接受以后

关于java写socket服务和c写的客户端的通信
最近由于一个项目的需要,客户端发送一个请求数据,服务端接受以后根据数据做出不同的回。我用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();
          }
}
}

client:
import   java.io.*;  
import   java.net.*;  

public   class   testclient1  
{  
Socket   socket;  
BufferedReader   in;  
PrintWriter   out;  
public   testclient1()  
{  
try  
{  
System.out.println( "Try   to   Connect   to   127.0.0.1:20000 ");  
socket   =   new   Socket( "127.0.0.1 ",20000);  
System.out.println( "The   Server   Connected! ");  
System.out.println( "Please   enter   some   Character: ");  
BufferedReader   line   =   new   BufferedReader(new   InputStreamReader(System.in));

 
out   =   new   PrintWriter(socket.getOutputStream(),true);  
out.println(line.readLine());  
in   =   new   BufferedReader(new   InputStreamReader(socket.getInputStream()));  
System.out.println(in.readLine());  
out.close();  
in.close();  
socket.close();  
}catch(IOException   e)  
{  
out.println( "Wrong ");  
}  
}  
public   static   void   main(String[]   args)  
{  
new   testclient1();  
}  
};

[解决办法]
这两种语言通信需要接口么
[解决办法]
你们监听的地址和端口是一样的吗?我以前编写这方面的程序都是没有问题。
[解决办法]
用你的client连C服务器
[解决办法]
1看是否能连上
2看连上后是否能接受数据。
能连上就会走accept(),然后再慢慢检查。
[解决办法]
收藏,谢谢!

热点排行