WSASendTo和WSARecvFrom的问题
socket吧
全部回复
仅看楼主
level 1
xgywd 楼主
我的封包void fengbof(sendbuf){ unsigned int arr=arraylen/1024;sendbuf[0].buf=(char*)&arr;sendbuf[0].len=sizeof(arraylen); sendbuf[2].buf=new char[1024];sendbuf[2].len=1024;sendbuf[3].buf=new char[4];sendbuf[3].len=4;sendbuf[4].buf=(char*)&arraylen;sendbuf[4].len=4;sendbuf[5].buf=(char*)strFileName.c_str();sendbuf[5].len=(u_long)strFileName.size(); sendbuf[1].buf=(char*)&fbit;sendbuf[1].len=sizeof(fbit)+1;memset(sendbuf[2].buf,0,1024);infile.read(sendbuf[2].buf,1024);memset(sendbuf[3].buf,0,4);sendbuf[3].buf[0]=sendbuf[0].buf[0];sendbuf[3].buf[1]=sendbuf[1].buf[0];sendbuf[3].buf[2]=sendbuf[2].buf[0];sendbuf[3].buf[3]='c';++fbit;}我的发送if(SOCKET_ERROR!=WSASendTo(sever, sendbuf, 6, &dwsend, 0, (sockaddr*)&addr,sizeof(sockaddr), NULL, NULL)){ strtext+=L"发包成功...\r\n"; m_edit.SetWindowTextW(strtext.c_str());}else{geterror();}我的收包if(SOCKET_ERROR==WSARecvFrom(sever,recbuf,6,&dwread,&dwflag,(sockaddr*)&addrfrom,&len,NULL,NULL)){strtext+=L"接收数据错误!\r\n";m_edit.SetWindowTextW(strtext.c_str());return 0;}else{if ( recbuf[3].buf[0]==recbuf[0].buf[0] &&recbuf[3].buf[1]==recbuf[1].buf[0] &&recbuf[3].buf[2]==recbuf[2].buf[0]){ jiao=true; strtext+=L"接包成功...\r\n";m_edit.SetWindowTextW(strtext.c_str());}else{ strtext += L"外来包丢弃...\r\n"; m_edit.SetWindowTextW(strtext.c_str());}收包的时候我有一个验证,就是根据封包时写的那样。结果现在我就是能发不能收,哪位大侠给看看
2008年08月10日 15点08分 1
level 1
不懂
2010年04月19日 05点04分 2
level 1
LZ的wsarecvform用错了地方,我就很奇怪你写的这代码,就一个函数,你要明白这个含数是异步,非组塞的,你程序根本没机会运行wsarecvform,你怎么接受啊,严格的说吧,只运行一次,你最起码要用个循环线成,不停的更新wsarecvform的状态,有数据来了会自动提取数据,我还是明白的告诉你吧,WaitForSingleObject 这函数你用了吗,这个函数你就放在线程里,wsarecvform接收也放在线程里,怎么做你清楚了吧,去摆渡去查下WaitForSingleObject 这函数怎么用的,你的问题也就解决了.

2012年02月22日 12点02分 3
1