不懂就问之这个socket发送的字节数为什么是零?
看如下代码:
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;
}
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;
}
...全文
相关推荐
python使用socket向客户端发送数据的方法
主要介绍了python使用socket向客户端发送数据的方法,涉及Python使用socket实现数据通信的技巧,非常具有实用价值,需要的朋友可以参考下
socket数据的接收和发送
Linux下数据的接收和发送 Linux 不区分套接字文件和普通文件,使用 write() 可以向套接字中写入数据,使用 read() 可以从套接字中读取数据。 前面我们说过,两台计算机之间的通信相当于两个套接字之间的通信,在服务器端用 write() 向套接字写入数据,客户端就能收到,然后再使用 read() 从套接字中读取出来,就完成了一次通信。 write() 的原型为: s
异步SOCKET编程-发送和接收数据[转] 异步SOCKET编程-发送和接收数据[转]
我本想把发送和接收分开作为两部分,但是最后我决定只略微解释一下 FD_READ ,留下更多的时间来说明更复杂的 FD_WRITE , FD_READ 事件非常容易掌握. 当有数据发送过来时, WinSock 会以 FD_READ 事件通知你, 对于每一个 FD_READ 事件, 你需要像下面这样调用 recv() :int bytes_recv = recv(wParam, &data,
利用socket连续发送与连续接收数据
刚刚学习socket的时候编写的程序,可以实现客户端连续向服务器发送三个数据,服务器端连续接受三个数据并返回给客户端处理结果
Socket编程的发送接收消息函数
关于Socket发生接收消息的VC++源代码


