1,定义服务器端口号,服务器IP。 #define SERVER_IP "255.255.255.52" #define SERVER_PORTNUMBER 30020
2,定义客户端端口号。# define CLIENT_PORTMEMBER
3,定义数据包大小。 #define LENGTH_DATAPACKET
4,开异步线程, pthread_t posixptread; int socketID = 0;
void *threadRecive(void *ptr)
{
ReciveData *receive = ReceiveData::GetReceiveData();
sockaddr_in serverSocket;
int nLen = 0;
short desport = Client_PORTNUMBER;
serverSocket.sin_family = AF_INET;//类型为UDP,TCP
serverSocket.sin_port = htons((short)desprt)//端口
serverSocket。sin_addr.s_addr = INADDR_ANY //
IP地址设置成INADDR_ANY,让系统自动获取本机的IP地址
nlen = sizeof(serverSocket);
//设置缓冲区
int nErr = 0 ;
int nbuf = 0;
int nOptlen = sizeof(nbuf);
//获取缓冲区大小
nErr = getsocketopt(SendData::GetSendData()->sock_fd,SOL_SOCKET,SO_RCVBUF,(char*)&nBufLen,(socklen_t*)&nOptlen);
short allcount = 0;
short package index = 0;
short userdatalen = 0 ; //接收到的数据长度
int recverror = 0;
short nowchecknum = 0;
chat *tempbuffer = new char[LENGTH_DATAPACKET];
SendData::GetSendData()->isQiDong = true;
bool tempBool = true;
while (tempBool)
{
struct tm *t;
time_t tt;
time(&tt);
t = localtime(&tt);
recverror = recvfrom(SendData::GetSendData()->sock_fd,tempbuffer,LENGTH_DATAPACKET,0,(struct sockadr*)&serverSocket,(socken_t*)&nLen);
if(-1 != recverror)
{
memcpy(&nowchecknum,tembuffer,2);
if(nowcheknum == -1)
{
aaa->DataXinTiao(tempbuffer);
}
else
{
//判断是否需要接受数据
if(!SendData::GetSendData()->bIsRecv)//处于接收状态
{
continue;
}
memepy(&allcount,tempbuffer+2,2);//总包数
receive->package count = all count;
mymcpy(&packageindex,tempbuffer+4,2);//当前包序号
memcpy(&userdatalen,tempbuffer+6,2);//用户数据长度
receive->userdatalen = userdatalen;
memcpy(receive->allpackagebuff + packageindec*(LENGET_DATAPACKET - 8),,tempbuffer + 8,userdatalen );//复制当前包信息到全局接受buff
receive->setRcvStatus(rcvPackageStatus,packageindex);
receive->DataAnalyzing();
}
}
}
void StartReceiveThread()(
{
ptheread_attr _t att;
int ret;
ret = pthread_attr_init(&attr);
assert(!ret);
int threadError = 0 ;
threadError = pthread_create(&posixthread,&attr,&threadRecive,Null);
ret = pthread_attr_destroy(&attr);
assert(!ret);
if(threaders != 0)
{
cclog("create thread error");
}
}
void closerReceiveThread()
{
#if(CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
pthread_cancel(posixTherad);
#endif
posixthread = null;
}
void AppDelegate::applicationStartReceivTherad()
{
startReceivThread();
}
void AppDelegate::applicationCloseReceivThread()
{
closeReceivThread();
}
bool AppDelgate::applicationDidFinishLanuching()
{
CCdirector *pDirector = CCDirector::shareDirector();
CCEglivew *pEGLView = CCGEGLView::sharedOpenGLView();
pDirector->setOpenGlViw(pEglview);
pDirector->setDisplayStats(true);
pDirector->setAnimationInterval(1.0/60);
ResourceDecode::shareDecode->setXXTeaKey(
XXTEACCArmature",strlen("XXTEACCArmature"),"decodetescaocao",strlen("decodetescaocao"))
ZipUtils::ccSetPvrEncryptionKey(0xd6a9a3f7 ,0x3ce2542e , 0xa534d557 ,0x65176d57);
Base::GetBase()->BaseInit();
pEGLView->setDesignResolutionSize(960,640, kResolutionShowAll);
pDirector->setContentScaleFactor(1);
}
}