用C#写的Socket客户端程序好象很难与用C++写的SOCKET服务器程序通讯,可以连接上,也能发送数据流,但显示时总是出现乱码.
1、有人说是编码问题,所以我想两个程序都使用unicode,但在用C++写的服务器程序中,我怎么样能把一个unicode类型的字符串转换为char类型给SOCKET呢?因为SOCKET发送和接受的都是char数据类型。
2、在C#中有byte类型表示字节,无论字节的编码方式是什么都可以用SOCKET发送和接受。
3、C++中的SOCKET只能接受char类型的数据类型,而根据资料说char不是unicode编码,那在C++中怎么样用SOCKET发送unicode编码数据呢?
问题说得不清楚,因为我被这东西搞糊涂了,但有一点是清楚的,那就是怎么样能C#写的客户端正确的显示从C++服务器上得到的字符串。
最好给个两端的伪代码例子,主要是C++端怎么样发送和接受unicode数据

解决方案 »

  1.   

    MultiByteToWideChar把ANSI转为UNICODE, WideCharToMultiByte把UNICODE转为ANSI. 发送接受都可以用这2个函数转换后进行.
      

  2.   

    可以将网络通讯模块封装成DLL,界面部分,无论C还是S,用C#和C++都无所谓了
      

  3.   

    没解决
    C#发送的是unicode编码格式的数据流,而C++接受是char类型的数组,C++接到后怎么样处理呢?char在C++不是unicode编码格式啊,不解不解不解啊,最好给出发送和接受处理的核心代码
      

  4.   

    客户机或是服务器转换一下格式就可以了网络传输使用的都是二进制数据接收后,使用MultiByteToWideChar把ANSI转为UNICODE就可以了
      

  5.   

    recv里的char*参数类型只是表示一个字节流,跟字符编码没有任何关系,你往网络层发什么东西就是什么东西,socket不会自动帮你转换。如果你C#发送的是宽字符流,那么在C++代码里也用WCHAR*来接受即可。
      

  6.   

    socket跟语言没有什么关系
    关键在于你怎么对你的数据进行解析和处理
      

  7.   

    我知道socket传输的是字节,与编码无关,现在的问题是怎么样传输unicode字符串呢?或者说unicode字符串怎么样转换为char类型.
    Send(..,char *send,..)TCHAR ch=_T("asdfad");
    怎么样用send函数发送ch这字符串呢?
    直接Send(..,ch,..)肯定不正确,因为参数类型不对
    就是怎么样将一个unicode编码格式的字符串转换成char型字节数组
      

  8.   

    两端都用标准的SOCKET就可以连上,不要被封装过的socket
      

  9.   

    这么简单的事,楼主咋就想不通呢?发的是unicode char,收的时候也用宽字符指针收就是了。如果收端报的参数是char *,你来个强制转换不就行了。
      

  10.   

    首先要明确你使用的是TCP还是UDP,然后再谈~
      

  11.   

    WCHAR* buf = L"asdfad";
    Send(socket, (char*)buf, wcslen(buf) * 2, ...);
      

  12.   

    注意,TCP/IP传输的数据是按照网络顺序的,发送和接收的时候,必须要转换为本地字节顺序,否则就是乱码
      

  13.   

    两边都用unicode的话就根本不用转换