不懂就问之这个socket发送的字节数为什么是零?

zhanglichen 2002-06-18 02:50:04
看如下代码:
typedef struct _MessageData
{
CString m_Name;
CString m_UserIp;
CString m_ServerIp;
UINT m_Port;
UINT m_Length;
CString m_MessageType;
CString m_MessageBody;
}MESSAGEDATA,*LPMESSAGEDATA;
class CMessageSocket : public CSocket
{...}
BOOL SenMessage(CMessageSocket * lpsock,LPMESSAGEDATA lpmessage);

CMessageSocket * m_MessageSocket;
MESSAGEDATA m_MessageData;

//此处对m_MessageData赋值
m_MessageData.m_Name=m_User.m_Name;
m_MessageData.m_UserIp=m_User.m_Ip;
m_MessageData.m_ServerIp=OnlineDlg.m_ServerIp;
m_MessageData.m_Port=6000;
m_MessageData.m_Length=sizeof(MESSAGEDATA);
m_MessageData.m_MessageType="ONLINE";
m_MessageData.m_MessageBody=m_User.m_Passward;

...
m_MessageSocket=new CMessageSocket;
if(!m_MessageSocket->Create(6000,SOCK_DGRAM,NULL))
{
delete m_MessageSocket;
m_MessageSocket=NULL;
AfxMessageBox("生成用户信息交互Socket出错");
return ;
}
SenMessage(m_MessageSocket,&m_MessageData);
...
BOOL SenMessage(CMessageSocket *lpsock, LPMESSAGEDATA lpmessage)
{
int byteAll;
int byteSent;
int sendingSize;

byteSent = 0;
byteAll = lpmessage->m_Length;

while(byteSent < byteAll)
{

if(!lpsock->Connect(lpmessage->m_ServerIp,5000))
{
delete lpsock;
AfxMessageBox("和服务器进行音频服务连接时出错");
return false;
}
//为什么在下一句里的sendingsize总是零?
if(sendingSize=(int)lpsock->Send((char *) lpmessage,sizeof(MESSAGEDATA),0)
== SOCKET_ERROR)
{
AfxMessageBox("发送用户信息出错");
return FALSE;
}

byteSent += sendingSize;
}
return true;
}
...全文
116 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhanglichen 2002-06-18
  • 打赏
  • 举报
回复
把SendMessage()改成如下:
BOOL SenMessage(CMessageSocket *lpsock, LPMESSAGEDATA lpmessage)
{
int sendingSize;

if(!lpsock->Connect(lpmessage->m_ServerIp,5000))
{
delete lpsock;
AfxMessageBox("和服务器进行音频服务连接时出错");
return false;
}

if(sendingSize=(int)lpsock->Send((char *)lpmessage,sizeof(MESSAGEDATA),0)
== SOCKET_ERROR)
{
AfxMessageBox("发送用户信息出错");
return FALSE;
}

return true;
}
zhanglichen 2002-06-18
  • 打赏
  • 举报
回复
应该不会啊..6000是这个程序(也就是客户端)用来发送消息的..5000是服务器端用来接受消息的..
zhanglichen 2002-06-18
  • 打赏
  • 举报
回复
应该不会啊..6000是这个程序(也就是客户端)用来发送消息的..5000是服务器端用来接受消息的..
jishiping 2002-06-18
  • 打赏
  • 举报
回复
首先申明,我不使用VC。socket通讯有两种方式,阻塞型(一般使用多线程)
和非阻塞型(消息驱动)。估计你使用的是非阻塞型(消息驱动),要等收到
socket连上的消息后才能向外发数据。你的写法是阻塞型的写法
masterdog 2002-06-18
  • 打赏
  • 举报
回复
是不是两个端口不一致?5000和6000?
zhanglichen 2002-06-18
  • 打赏
  • 举报
回复
up
zhanglichen 2002-06-18
  • 打赏
  • 举报
回复
再up
zhanglichen 2002-06-18
  • 打赏
  • 举报
回复
up..其实代码很简单的..我不知道哪里出错了..请指点//
sammon 2002-06-18
  • 打赏
  • 举报
回复
建议不用CSocket,用socket api,个人经验和意见仅供参考
sammon 2002-06-18
  • 打赏
  • 举报
回复
建议不用CSocket,用socket api,个人经验和意见仅供参考
sammon 2002-06-18
  • 打赏
  • 举报
回复
建议不用CSocket,用socket api,个人经验和意见仅供参考

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧