高手!不同编程语言编写的基于SOCKET程序怎么通讯?Socket服务器程序用C++写的,Socket客户端程序用C#写的.unicode
用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数据
问题点数:100、回复次数:20Top
1 楼laiyiling(陌生人[MVP])回复于 2006-06-02 08:22:51 得分 0
MultiByteToWideChar把ANSI转为UNICODE, WideCharToMultiByte把UNICODE转为ANSI. 发送接受都可以用这2个函数转换后进行.Top
2 楼awnucel(西大耻犹未雪,南京恨何时灭&抵制日货)回复于 2006-06-02 10:21:49 得分 0
可以将网络通讯模块封装成DLL,界面部分,无论C还是S,用C#和C++都无所谓了
Top
3 楼jiezhangxi(结)回复于 2006-06-02 10:32:34 得分 0
没解决
C#发送的是unicode编码格式的数据流,而C++接受是char类型的数组,C++接到后怎么样处理呢?char在C++不是unicode编码格式啊,不解不解不解啊,最好给出发送和接受处理的核心代码Top
4 楼nuaawenlin(飘人)回复于 2006-06-02 11:09:26 得分 0
客户机或是服务器转换一下格式就可以了
网络传输使用的都是二进制
数据接收后,使用MultiByteToWideChar把ANSI转为UNICODE就可以了Top
5 楼Analyst()回复于 2006-06-02 18:55:16 得分 0
recv里的char*参数类型只是表示一个字节流,跟字符编码没有任何关系,你往网络层发什么东西就是什么东西,socket不会自动帮你转换。如果你C#发送的是宽字符流,那么在C++代码里也用WCHAR*来接受即可。Top
6 楼jiezhangxi(结)回复于 2006-06-04 07:44:53 得分 0
顶,没解决啊Top
7 楼SeRapHiw(灯芯草)回复于 2006-06-04 10:54:08 得分 0
socket跟语言没有什么关系
关键在于你怎么对你的数据进行解析和处理Top
8 楼coolzdp(unreal张师傅)回复于 2006-06-04 23:41:37 得分 0
用XML-RPCTop
9 楼jiezhangxi(结)回复于 2006-06-09 10:16:48 得分 0
我知道socket传输的是字节,与编码无关,现在的问题是怎么样传输unicode字符串呢?或者说unicode字符串怎么样转换为char类型.
Send(..,char *send,..)
TCHAR ch=_T("asdfad");
怎么样用send函数发送ch这字符串呢?
直接Send(..,ch,..)肯定不正确,因为参数类型不对
就是怎么样将一个unicode编码格式的字符串转换成char型字节数组Top
10 楼sdf123321()回复于 2006-06-09 15:06:01 得分 0
没那么复杂Top
11 楼shark2004(伤心小丑)回复于 2006-06-13 18:09:25 得分 0
楼主:我用同样的方法,服务器端用C++,客户端用C#,但是发现客户端一直连接不上服务器,请楼主指教一下!!先谢了...Top
12 楼jiezhangxi(结)回复于 2006-06-14 08:32:25 得分 0
两端都用标准的SOCKET就可以连上,不要被封装过的socketTop
13 楼Delphityro(下岗工人)回复于 2006-06-14 09:02:39 得分 0
这么简单的事,楼主咋就想不通呢?发的是unicode char,收的时候也用宽字符指针收就是了。如果收端报的参数是char *,你来个强制转换不就行了。Top
14 楼bm1408(向va_list学习~不用VC好多年~)回复于 2006-06-14 17:05:09 得分 0
首先要明确你使用的是TCP还是UDP,然后再谈~Top
15 楼jiezhangxi(结)回复于 2006-07-07 17:05:39 得分 0
TCPTop
16 楼Analyst()回复于 2006-07-07 19:47:41 得分 0
WCHAR* buf = L"asdfad";
Send(socket, (char*)buf, wcslen(buf) * 2, ...);
Top
17 楼slek(我浮躁,可是我很厚道!)回复于 2006-07-07 20:23:32 得分 0
没什么不一样,两边用的协议一样就可以了Top
18 楼guihui5460( flystar)回复于 2006-07-10 15:45:30 得分 0
协议又不是ms 的,协议一样就行了,没那么麻烦Top
19 楼amber1973()回复于 2006-07-10 16:22:13 得分 0
注意,TCP/IP传输的数据是按照网络顺序的,发送和接收的时候,必须要转换为本地字节顺序,否则就是乱码Top
20 楼thisworld(这个世界)回复于 2006-07-10 16:30:51 得分 0
两边都用unicode的话就根本不用转换Top




