struct DATAPACKAGE
{
// char *name;
// DWORD ip;
UINT dataType;
UINT nlen;
};void CSrvClientDlg::OnBtnSend() //发送按钮响应函数
{
UpdateData(TRUE);
SOCKADDR_IN addr_to;
addr_to.sin_family=AF_INET;
addr_to.sin_port=htons(m_nPort);
addr_to.sin_addr.S_un.S_addr=inet_addr("233.0.0.1");
int len=m_strSendText.GetLength();
char *pSend=m_strSendText.GetBuffer(len);
FillDataPackage(pSend,len,TEXTINFO);
DATAPACKAGE *dp=(DATAPACKAGE*)m_pSend;
if(sendto(m_sock,m_pSend,1024,0,(SOCKADDR*)&addr_to,sizeof(SOCKADDR))==0)
{
MessageBox("发送数据失败");
return ;
}
m_strSendText=""; UpdateData(FALSE);
}BOOL CSrvClientDlg::FillDataPackage(char* pData,UINT len,UINT type) //填充数据结构函数
{
if(m_pSend==NULL) //m_pSend是类的一个成员变量
m_pSend=(char*)malloc(1024);
ZeroMemory(m_pSend,1024);
DATAPACKAGE dp;
dp.dataType=type;
dp.nlen=len;
memcpy(m_pSend,&dp,sizeof(dp));
memcpy(m_pSend+sizeof(dp),pData,len);
return TRUE;
}void CSrvClientDlg::OnNetWorkMsg(WPARAM wParam,LPARAM lParam)
{
SOCKADDR_IN addr_from;
DATAPACKAGE *dp=NULL;
char *p=NULL;
if(m_pRecv==NULL)
m_pRecv=(char*)malloc(1024);
ZeroMemory(m_pRecv,1024);
int len=sizeof(SOCKADDR);
if(LOWORD(lParam)==FD_READ)
{
recvfrom(m_sock,m_pRecv,1024,0,(SOCKADDR*)&addr_from,&len);
dp=(DATAPACKAGE*)m_pRecv;
switch(dp->dataType)
{
case TEXTINFO: //文本信息
p=m_pRecv+sizeof(dp);
m_strRecvText=m_strRecvText+p+"\r\n";
UpdateData(FALSE);
break;
case AUDIOINFO: //音频信息
break;
}
}
}套接字是个多播套接字,当发送不带数据结构的信息时 可以收到 并显示出来 可是当发送带数据结构信息的时候 可以收到数据结构这部分信息 后面的文本信息字节流确收不到 为什么啊?
{
// char *name;
// DWORD ip;
UINT dataType;
UINT nlen;
};void CSrvClientDlg::OnBtnSend() //发送按钮响应函数
{
UpdateData(TRUE);
SOCKADDR_IN addr_to;
addr_to.sin_family=AF_INET;
addr_to.sin_port=htons(m_nPort);
addr_to.sin_addr.S_un.S_addr=inet_addr("233.0.0.1");
int len=m_strSendText.GetLength();
char *pSend=m_strSendText.GetBuffer(len);
FillDataPackage(pSend,len,TEXTINFO);
DATAPACKAGE *dp=(DATAPACKAGE*)m_pSend;
if(sendto(m_sock,m_pSend,1024,0,(SOCKADDR*)&addr_to,sizeof(SOCKADDR))==0)
{
MessageBox("发送数据失败");
return ;
}
m_strSendText=""; UpdateData(FALSE);
}BOOL CSrvClientDlg::FillDataPackage(char* pData,UINT len,UINT type) //填充数据结构函数
{
if(m_pSend==NULL) //m_pSend是类的一个成员变量
m_pSend=(char*)malloc(1024);
ZeroMemory(m_pSend,1024);
DATAPACKAGE dp;
dp.dataType=type;
dp.nlen=len;
memcpy(m_pSend,&dp,sizeof(dp));
memcpy(m_pSend+sizeof(dp),pData,len);
return TRUE;
}void CSrvClientDlg::OnNetWorkMsg(WPARAM wParam,LPARAM lParam)
{
SOCKADDR_IN addr_from;
DATAPACKAGE *dp=NULL;
char *p=NULL;
if(m_pRecv==NULL)
m_pRecv=(char*)malloc(1024);
ZeroMemory(m_pRecv,1024);
int len=sizeof(SOCKADDR);
if(LOWORD(lParam)==FD_READ)
{
recvfrom(m_sock,m_pRecv,1024,0,(SOCKADDR*)&addr_from,&len);
dp=(DATAPACKAGE*)m_pRecv;
switch(dp->dataType)
{
case TEXTINFO: //文本信息
p=m_pRecv+sizeof(dp);
m_strRecvText=m_strRecvText+p+"\r\n";
UpdateData(FALSE);
break;
case AUDIOINFO: //音频信息
break;
}
}
}套接字是个多播套接字,当发送不带数据结构的信息时 可以收到 并显示出来 可是当发送带数据结构信息的时候 可以收到数据结构这部分信息 后面的文本信息字节流确收不到 为什么啊?
解决方案 »
- 如何在CTabCtrl的某一TAB页中响应WM_LBUTTONDOW消息,回帖有分
- 单文档程序,弹出一个Dialog,隐藏MianFrame问题
- directshow无法静音
- WSAGetLastError()返回2是什么意思啊?简直是灵异事件!
- 请教 ,做播放器时,怎么实现循环播放!!
- 如何禁止某个ip的数据包(如同防火墙一样),请高手指点!
- _bstr_t在.net 2003中不能使用的问题
- 谁用过和wavein相关的api???
- 求MCSD的70-015电子书和考题。给500分
- vc++中如何捕获Edit控件中的回车消息
- ReadProcessMemory如何读字符串
- 有高手能帮一下吗?
int nTotalsize = 1000;
while(nTotalsize > 0)
{ int nsize = recv(buf, size0f(buf), 0); nTotalsize -= nsize;
}
这样处理 原因是因为, 网络情况不好的时候 数据包被分块发送了.
while(nTotalsize > 0)
{ int nsize = recv(buf, size0f(buf), 0);
buf = buf + nsize;
nTotalsize -= nsize;
}