c++服务器通过socket接收安卓客户端发来信息时乱码的处理

听说java默认发送是使用UTF8的,而c++默认是gb2312,需要转换一下正确接收

参考资料

http://www.cnblogs.com/kenkofox/archive/2010/04/25/1719649.html

java端发送信息核心代码

头部

private Socket socket=null;
	private OutputStream aaa=null;


 

内容

	socket=new Socket();  
		             try{  
		            	// socket.connect("192.168.1.100:8888", 2000)
		            	 socket.connect(new InetSocketAddress("192.168.1.100",8888),2000);  
		             }
		              catch (IOException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
						return false;
					} 
		
		
		try {
			
			aaa=socket.getOutputStream();

			byte[] buffer=new byte[200];

			String strbuffer="succeeded!你好";
			
			
			buffer=strbuffer.getBytes("GB2312");

			aaa.write(buffer);


 

c++核心代码

 

// SocketTest.cpp : Defines the entry point for the console application.
//
#include "stdio.h"   
#include <WINSOCK2.H>  
#pragma comment(lib, "Ws2_32.lib")

struct   UserInfo   {   
	char   UserName[20];   
	int   UserId;   
};   
struct   Employee   {   
	UserInfo   user;   
	float   salary;   
};   
int main(int argc, char* argv[]) {   
	
	WSADATA   wsaData;   
	char   buf[1024];
	int   nBytes=1024, recvbytes;   
	SOCKET   Listening;   
	SOCKET   NewConnection;
		  SOCKADDR_IN   ServerAddr;   
		  SOCKADDR_IN   ClientAddr;   
		  int   ClientAddrLen=sizeof(ClientAddr);   
		  int   Port = 8888;   
		  WSAStartup(MAKEWORD(2,2),&wsaData);   
		  Listening = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP );   
		  ServerAddr.sin_family = AF_INET;   
		  ServerAddr.sin_addr.s_addr = htonl(INADDR_ANY);   
		  ServerAddr.sin_port = htons(Port);   
		  
		  bind( Listening, (SOCKADDR *)&ServerAddr, sizeof(ServerAddr) );   
		  listen( Listening, 5 );
		  printf( "Wating   accpet....\n" );   
		  
		  
		  while(true) {
			  NewConnection = accept(Listening,(SOCKADDR   *)&ClientAddr, &ClientAddrLen);   
			  printf( "Wating   recv.....\n" );   
			  if( ( recvbytes=recv(NewConnection,buf,nBytes,0) )   ==   SOCKET_ERROR )   
			  {   
				  printf( "\nErrorcode=%d,   Recv   from   client\n", WSAGetLastError() );
				  return   0;   
			  }   
			  Employee   *data   =   new   Employee;   
			  data   =   (Employee   *)&buf;   
			  
			  printf( "Userid:   %d   Username:   %s  Salary:  %f", data->user.UserId, data->user.UserName, data->salary );   
			  data->user.UserId = 007;   
			  strcpy(data->user.UserName, "Test郑海波");
			  data->salary = 800;
			  
			  send( NewConnection, "aaa", recvbytes, 0 );
			  
		  }
		  return   0;
		  
}


 安卓客户端接收c++转发过来的数据代码

byte[] buf = new byte[1024];		
				int len = in.read(buf);		
				//String text1 = new String(buf,0,len);
				String text1 = new String(buf,"GB2312").trim();
				text.setText(text1);


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值