recv()和send()只能发送CHAR型?????? 我自己定义了一个CCLIENTITEM的结构体,,能不能直接用SEND()函数把这个结构体类型的数据发给客户端啊 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 当然可以了,接收的时候也转换成CCLIENTITEM结构就可以了 可以用 char* 发送过去。如下: T_QRYCONDITION tQryCondition; tQryCondition.iQueryConditionType = htons(nParam1); strncpy(tQryCondition.szQueryCondition, strParam2.c_str(), 1024); iError = send(m_hClientSocket, (const char *)&tQryCondition, sizeof(tQryCondition), 0); if(iError >= 0) { TRACE("发送成功"); } else if(iError == SOCKET_ERROR) { closesocket(m_hClientSocket); return ""; }接收: //接收 char szBuf[2048] = {0}; int iRec = recv(clientSocket, szBuf, sizeof(szBuf), 0); if (iRec > 0) { T_QRYCONDITION *pQryCondition = (T_QRYCONDITION *)szBuf; } 可以啊。CCLIENTITEM ClientItem;//填充内容//再sendsend(s,(char*)&ClientItem,sizeof(ClientItem),0);//s为SOCKET 但是CCLIENTITEM里面不能有指针。 不行啊,,,发送过去后收到的结构体没数据啊我的发送代码:send(accSock,(char*)&pChatRoom->m_ClientArray,sizeof(pChatRoom->m_ClientArray),0);我的接收代码: CArray<CClientItem,CClientItem> *m_ClientArray2; recv(pChatRoom->m_ConnectSock,szbuf3, sizeof(szbuf3), 0); m_ClientArray2 = (CArray<CClientItem,CClientItem> *) szbuf3; pChatRoom->m_OnlineName.ResetContent(); for( idx2 = 0; idx2 <m_ClientArray2->GetSize(); idx2++ ) { pChatRoom->m_OnlineName.AddString(m_ClientArray2->ElementAt(idx2).ClientName); }结构体代码:class CClientItem {public: int num; CString m_strIp; SOCKET m_Socket; HANDLE hThread; CMychatroomDlg *m_pMainWnd; CHAR ClientName[1024]; CClientItem(){ m_pMainWnd = NULL; m_Socket = INVALID_SOCKET; hThread = NULL; }}; 那是数据块!一般是数据内存地址再加上长度!比如要你要发送一个int 那么就是int a=100;send(&a,sizeof(int)); [急] 看 段 C 语 言 fopen fwrite 写 文 件 的 问 题 请问如何把WINMAIN函数封装进DLL? 请问 一个奇怪的问题 com有类似析构函数作用的函数吗? 改变ListCtrl某一行的字体颜色? 关于文件包含的问题, 用datagrid 控件的程序在本机好用,在另外一台提示cannot initialize data bindings 想买一本inside visual c++,清华的还是希望的好,大虾提醒则个。 小虾,大虾请帮忙了 利用List Control控件删除数据后不自动失去焦点 CPropertySheet加入的属性页的个数不能超过99个?
接收的时候也转换成CCLIENTITEM结构就可以了
如下:
T_QRYCONDITION tQryCondition;
tQryCondition.iQueryConditionType = htons(nParam1);
strncpy(tQryCondition.szQueryCondition, strParam2.c_str(), 1024);
iError = send(m_hClientSocket, (const char *)&tQryCondition, sizeof(tQryCondition), 0);
if(iError >= 0)
{
TRACE("发送成功");
}
else if(iError == SOCKET_ERROR)
{
closesocket(m_hClientSocket);
return "";
}
接收: //接收
char szBuf[2048] = {0};
int iRec = recv(clientSocket, szBuf, sizeof(szBuf), 0);
if (iRec > 0)
{
T_QRYCONDITION *pQryCondition = (T_QRYCONDITION *)szBuf;
}
//填充内容
//再send
send(s,(char*)&ClientItem,sizeof(ClientItem),0);//s为SOCKET
我的发送代码:send(accSock,(char*)&pChatRoom->m_ClientArray,sizeof(pChatRoom->m_ClientArray),0);
我的接收代码: CArray<CClientItem,CClientItem> *m_ClientArray2;
recv(pChatRoom->m_ConnectSock,szbuf3, sizeof(szbuf3), 0);
m_ClientArray2 = (CArray<CClientItem,CClientItem> *) szbuf3;
pChatRoom->m_OnlineName.ResetContent();
for( idx2 = 0; idx2 <m_ClientArray2->GetSize(); idx2++ )
{
pChatRoom->m_OnlineName.AddString(m_ClientArray2->ElementAt(idx2).ClientName);
}
结构体代码:class CClientItem {
public:
int num;
CString m_strIp;
SOCKET m_Socket;
HANDLE hThread;
CMychatroomDlg *m_pMainWnd;
CHAR ClientName[1024];
CClientItem(){
m_pMainWnd = NULL;
m_Socket = INVALID_SOCKET;
hThread = NULL;
}
};
一般是数据内存地址再加上长度!
比如要你要发送一个int
那么就是
int a=100;
send(&a,sizeof(int));