我们用java开发了一套socket的服务器端,现在需要给客户提供VC程序的socket客户端。但是不知道为什么当客户端连接上服务器端之后,java服务器端发送给客户端的字符流可以接收的到,VC开发的客户端发送给java服务器端的字符流,服务器端接收不到。直到客户端断开连接的时候才能够把消息发送到服务器端!我知道在java中有一个flush()的函数能够强制将缓存的数据发送到连接的对方,然后清空缓存,但是不知道VC中有没有这样一个函数!想请教大家,有没有碰到过类似问题?怎么解决的?

解决方案 »

  1.   

    不会呀,你用C++的socket试试,发过去马上就可以收到,会不会是你的服务端的问题?
      

  2.   

    可是我的服务器端用java开发的客户端发送信息都没有任何问题啊!我请教了几个人,有个说需要把我的java开发的socket的接收改成接收二进制的。他说我现在用的是readline(),好像不能和VC开发的socket进行通信!
      

  3.   

    呵呵.
    readline好像是读到一行吧.
    也就是需要 '\n'结束的.你试试其他方法呢?我也忘记了java是怎么做的了.
      

  4.   

    我对我的程序做了如下的修改:
    我原来的程序如下:
    PrintWriter out = new PrintWriter(socket.getOutputStream(), true); 
    BufferedReader in = new BufferedReader( new InputStreamReader( socket.getInputStream()));
     
    String inputLine, outputLine; 
    out.println("<?xml version='1.0' encoding='ISO-8859-1'?><txnreq><syscode>0101</syscode><sysword>等待数据包</sysword></txnreq>"); 
    out.flush();
    while ((inputLine=in.readLine())!=null) { 
    outputLine = inputLine;
    out.println(outputLine); 
    out.flush();

    修改后的程序如下:
    PrintWriter out = new PrintWriter(socket.getOutputStream(), true); 
    BufferedReader in = new BufferedReader( new InputStreamReader( socket.getInputStream()));
     
    String inputLine, outputLine; 
    out.println("<?xml version='1.0' encoding='ISO-8859-1'?><txnreq><syscode>0101</syscode><sysword>等待数据包</sysword></txnreq>"); 
    out.flush();
    boolean a = true;
    while (a){
    System.out.println(in.read());
    }
    这样的话,用in.read()就可以得到用VC开发的客户端发送过来的信息!
    但是,用in.read()的话我们java服务器端还得对发送过来的二进制流进行重新组合!
    有没有我们java服务器端用in.readLine()就可以读到VC开发的客户端发送过来的信息的方法?
        现在想请教的是,VC怎样才能够发送一行字符到服务器端?
      

  5.   

    in.read() != EOF//把得到的数据直接写到缓冲区就可以了.