请教一个socket通信的数据处理有关问题
请问一个socket通信的数据处理问题?
如果我用c#发过来一个utf-8的中文和英文混合的字符串,我应该怎么处理,cout<<buf才能输出正确的数据,我上面的代码输出的是乱码?请问一般情况下,socket通信采用什么编码的数据进行通信!
------解决方案--------------------
你可以自己定义规则,这就是通讯协议设计的内容了,可以baidu一下。
------解决方案--------------------
windows用的不是utf-8。可以转成ucs-2(utf-16),输出。或者再转回ANSI。
------解决方案--------------------
- C/C++ code
int main() { WSADATA wsaData; SOCKET sServer,sClient; char buf[1024]; WORD version=MAKEWORD(2,0); int ret=WSAStartup(version,&wsaData); if(ret!=0) cout<<"初始化失败"<<endl;else cout<<"初始化成功\r\n"; sServer=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); if(INVALID_SOCKET==sServer) { WSACleanup(); return -1; } SOCKADDR_IN addServ; addServ.sin_family=AF_INET; addServ.sin_port=htons(5090); addServ.sin_addr.S_un.S_addr = INADDR_ANY; int retVal=bind(sServer,(LPSOCKADDR)&addServ,sizeof(SOCKADDR)); if(SOCKET_ERROR==retVal) { closesocket(sServer); WSACleanup(); cout<<"开始监听失败"<<endl; return -1; } listen(sServer,0); sockaddr_in addrClient; int addrClientlen=sizeof(addrClient); while (1) { sClient=accept(sServer,(sockaddr FAR *)&addrClient,&addrClientlen); if (SOCKET_ERROR==sClient) { continue; } ZeroMemory(buf,sizeof(buf)); retVal=recv(sClient,buf,sizeof(buf),0); int couts=0; for (int i=0;i<1024;i++) { if(buf[i]=='\0') { break; } else couts++; } const char * pData=buf; string strResult(buf,couts); cout<<"数量为:"<<couts<<endl; if(sClient==INVALID_SOCKET) { closesocket(sClient); continue; } closesocket(sClient); cout<<buf; }
如果我用c#发过来一个utf-8的中文和英文混合的字符串,我应该怎么处理,cout<<buf才能输出正确的数据,我上面的代码输出的是乱码?请问一般情况下,socket通信采用什么编码的数据进行通信!
------解决方案--------------------
你可以自己定义规则,这就是通讯协议设计的内容了,可以baidu一下。
------解决方案--------------------
windows用的不是utf-8。可以转成ucs-2(utf-16),输出。或者再转回ANSI。
------解决方案--------------------
- C/C++ code
windows:utf-8转unicode,然后wcout.
------解决方案--------------------
采取的是数据流,接受到的数据跟你发送时的是一样的!
------解决方案--------------------
------解决方案--------------------