这里指针为什么不能强制转换呢,请大家诊断诊断啊解决方法
这里指针为什么不能强制转换呢,请大家诊断诊断啊
error C2664: 'send' : cannot convert parameter 2 from 'struct _WSABUF *' to 'const char *'
请高手开个好药方,指点指点啊
------解决方案--------------------
传地址时转化为long,再由long转回去就好了
------解决方案--------------------
if( send(clientSock, (char*)(&m_wsabuf), m_nUsed, 0) == SOCKET_ERROR)
{
cout << "send faild~ ERROR: "<< GetLastError() <<endl;
}
send要求的参数是const char*类型
int send(
SOCKET s,
const char FAR *buf,
int len,
int flags
);
------解决方案--------------------
reinterpret_cast<char*>(&m_wsabuf)
或者(char*)&m_wsabuf
- C/C++ code
#include <stdio.h> #include <iostream> #include <winsock2.h> #include <string.h> #pragma comment(lib,"wsock32.lib") using namespace std; typedef BYTE near *PBYTE; typedef unsigned char BYTE; #define MAXIMUMPACKAGESIZE 512 int m_nUsed; BYTE m_Buffer[MAXIMUMPACKAGESIZE]; AddData(BYTE data); AddData(UINT data); AddData(const BYTE *const pData, UINT nSize); int main() { WORD version = MAKEWORD(1,1); WSADATA wsaData; SOCKET clientSock; int err = WSAStartup(version, &wsaData); if (err != 0) { cout << "load Winsock lib error!Error:"<< GetLastError()<<endl; return -1; } else { cout << "load Winsock lib success----"<< endl; } clientSock = socket(AF_INET, SOCK_STREAM, 0); SOCKADDR_IN addrSrv; addrSrv.sin_family = AF_INET; addrSrv.sin_addr.S_un.S_addr= inet_addr("121.248.206.142"); addrSrv.sin_port = htons(999); memset(addrSrv.sin_zero,0,8); if (connect(clientSock,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR)) == SOCKET_ERROR) { cout << "build connection failded!\n"; cout << "Error:" << WSAGetLastError() << endl; return -1; } char sendtxt[] = {"helloworld"}; UINT txtLength = strlen(sendtxt); UINT Length = strlen(sendtxt); Length +=4; // add for store strlen: int Length++;// for TYPE BYTE Type = 0; AddData(Length); AddData(Type); AddData((PBYTE)sendtxt, txtLength); BYTE nullTerm='\0'; AddData(nullTerm); WSABUF m_wsabuf; m_wsabuf.buf = reinterpret_cast<char*>(m_Buffer); m_wsabuf.len = m_nUsed; if(send(clientSock, const_cast<WSABUF*>(&m_wsabuf), m_nUsed, 0) == SOCKET_ERROR); { cout << "send faild~ ERROR: "<< GetLastError() <<endl; } closesocket(clientSock); WSACleanup(); } AddData(const BYTE *const pData, UINT nSize) { if ( nSize > MAXIMUMPACKAGESIZE-m_nUsed ) return FALSE; else { memcpy(m_Buffer + m_nUsed, pData, nSize); m_nUsed += nSize; return TRUE; } } AddData(UINT data) { return AddData(reinterpret_cast<const BYTE*>(&data), sizeof(UINT)); } AddData(BYTE data) { return AddData(&data, 1); }
error C2664: 'send' : cannot convert parameter 2 from 'struct _WSABUF *' to 'const char *'
请高手开个好药方,指点指点啊
------解决方案--------------------
传地址时转化为long,再由long转回去就好了
------解决方案--------------------
if( send(clientSock, (char*)(&m_wsabuf), m_nUsed, 0) == SOCKET_ERROR)
{
cout << "send faild~ ERROR: "<< GetLastError() <<endl;
}
send要求的参数是const char*类型
int send(
SOCKET s,
const char FAR *buf,
int len,
int flags
);
------解决方案--------------------
reinterpret_cast<char*>(&m_wsabuf)
或者(char*)&m_wsabuf