Delphi写的Socket客户端接收Delphi写的Socket服务端发过来的数据没问题,接收C#发过来的就出现乱码。怀疑是编码不统一的问题,但不知道怎么解决,哪位给点思路?
代码附下(去掉了无关部分):
var
  recvbuf:string;
  buf:array[0..255] of char;
  ......while true do
begin
  result:=recv(sk,buf,255,0);  //数据能接收到
  if result=SOCKET_ERROR then
  begin
    ......
  end
  else
  begin
    recvbuf:=buf;  //用Delphi写的服务端自动转换成正确的字符串,用C#服务端接的则是乱码
    SendMessage(frmMain.Handle,MSG_WINSOCK_STATE,Integer(recvbuf),0);
    break;
  end;
end;

解决方案 »

  1.   

    TCP/UDP通讯即数据传输和语言平台无关
      出现乱码的问题如楼上所言,编码约定规则出了问题,跨语言平台容易出问题的往往是和传输相关的那些数据结构,比如 D 中定义的 record 和C#中定义 struct 中数据项类型所占用大小及类型一致即可。
      

  2.   

    对于record类型我是清楚的,要在Delphi中指定packed record才能保证字节两边的一致,但对于字符串就不知道要怎么处理.
      

  3.   

    C#端传过来的串编码楼主可以根据乱码猜猜的..
    一般来说是UTF8吧..
    编码转换的函数可查DELPHI帮助或在网上用GOOGLE
      

  4.   

    UTF8Decode
    UTF8Encode etc.
    最好不要传结构。