最近因公司需要,原来两个程序(服务端delphi,客户端vc开发)需要传图片, 服务端采用TIdTCPServer,先给客户端发送(WriteLn)图像大小文本信息,结尾有乱码,改为(Write)后,乱码数减少,仍然由乱码在末尾。图像直接发送流,也不正常,各位指点指点。

解决方案 »

  1.   

    先给客户端发送图像大小文本信息使用Writeln是可以用的,
    Writeln会在发送的字符串后面加上0x0d0x0a,也就是回车换行,
    客户端接收的时候,可以依据它判断开头的是图像大小信息。。然后服务端只管发,客户端只管收二进制流。。这种自定义的协议同HTTP协议返回内容方式非常接近的。。(HTTP使用了
    两个回车换行作分隔)
      

  2.   

    关键是客户端是VC做的,发送端(Server,delphi开发)代码如下
         //发送文件信息,大小,文件名    
       Write(ImgInfo);
         // Writeln(ImgInfo);
         //则回传图像数据流,约30K
       WriteStream(myStream,true,false);
      

  3.   

    如果用Write(ImgInfo);
    可以让ImgInfo定长..
    接收端接收定长的ImgInfo..这样的话,你发送端的代码没有多少问题.
      

  4.   

    是不是发送的文本信息后面没有空字符做结尾,结果C无法确定接收的文本长度,pascal和C在字符串处理上有差别。
      

  5.   

    首先发送定长字符串(30个),但是接收端收到的大于30个,在debug中看到。郁闷中...