我以流套接字的方式写好了服务器端的程序,但是客户端的程序想用PB来写,这样就需要调用封装好的Socket DLL。建立套接字和关闭套接字,这两个函数我还会写,但可能也有毛病,贴出来,高手帮忙看看吧。
extern "C" _declspec ( dllexport )
int PASCAL SocketConnect(LPCTSTR lpszSerIPAddr, UINT nPort)
{
WORD wVersionRequested; // 定义版本信息变量
WSADATA wsaData; // 定义数据信息变量 DWORD dwIPAddr;
SOCKADDR_IN sockAddr; int iErrorCode; // 定义错误号变量 wVersionRequested = MAKEWORD(2,1); // 给版本信息赋值
iErrorCode = WSAStartup(wVersionRequested, &wsaData); // Could not load Windows Sockets DLL.
if(iErrorCode != 0)
{
WSACleanup();
return -1;
} // Server IPAddress ...
if((dwIPAddr = inet_addr(lpszSerIPAddr)) == INADDR_NONE)
{
WSACleanup();
return -2;
}
else
{
m_hClientSocket = socket(PF_INET, SOCK_STREAM, 0);
sockAddr.sin_family = AF_INET;
sockAddr.sin_port = htons(nPort);
sockAddr.sin_addr.S_un.S_addr = dwIPAddr; // Connected Server error...
iErrorCode = connect(m_hClientSocket, (LPSOCKADDR)&sockAddr, sizeof(sockAddr));
if(iErrorCode != 0)
return -3;
} return 0;
}extern "C" _declspec ( dllexport )
int PASCAL SocketClose()
{
closesocket(m_hClientSocket);
WSACleanup();
return 0;
}最关键的是在写接受和发送函数时,要用到异步选择机制,在基于VC环境的Dialog下,
WSAAsyncSelect(m_hServerSocket, m_pDlg->GetSafeHwnd(), WM_SERVER_ACCEPT, FD_ACCEPT);
的窗口句柄我会写,但是如果是在DLL中那该如何处理??
高手们能否帮我写好可以在DLL中调用的客户端接受和发送函数,
要求:
接受函数的返回值是接受的内容(可以是int型的1、2、3...)
发送函数的参数为int型,请高手帮忙实现,我也可以读读代码
extern "C" _declspec ( dllexport )
int PASCAL SocketConnect(LPCTSTR lpszSerIPAddr, UINT nPort)
{
WORD wVersionRequested; // 定义版本信息变量
WSADATA wsaData; // 定义数据信息变量 DWORD dwIPAddr;
SOCKADDR_IN sockAddr; int iErrorCode; // 定义错误号变量 wVersionRequested = MAKEWORD(2,1); // 给版本信息赋值
iErrorCode = WSAStartup(wVersionRequested, &wsaData); // Could not load Windows Sockets DLL.
if(iErrorCode != 0)
{
WSACleanup();
return -1;
} // Server IPAddress ...
if((dwIPAddr = inet_addr(lpszSerIPAddr)) == INADDR_NONE)
{
WSACleanup();
return -2;
}
else
{
m_hClientSocket = socket(PF_INET, SOCK_STREAM, 0);
sockAddr.sin_family = AF_INET;
sockAddr.sin_port = htons(nPort);
sockAddr.sin_addr.S_un.S_addr = dwIPAddr; // Connected Server error...
iErrorCode = connect(m_hClientSocket, (LPSOCKADDR)&sockAddr, sizeof(sockAddr));
if(iErrorCode != 0)
return -3;
} return 0;
}extern "C" _declspec ( dllexport )
int PASCAL SocketClose()
{
closesocket(m_hClientSocket);
WSACleanup();
return 0;
}最关键的是在写接受和发送函数时,要用到异步选择机制,在基于VC环境的Dialog下,
WSAAsyncSelect(m_hServerSocket, m_pDlg->GetSafeHwnd(), WM_SERVER_ACCEPT, FD_ACCEPT);
的窗口句柄我会写,但是如果是在DLL中那该如何处理??
高手们能否帮我写好可以在DLL中调用的客户端接受和发送函数,
要求:
接受函数的返回值是接受的内容(可以是int型的1、2、3...)
发送函数的参数为int型,请高手帮忙实现,我也可以读读代码
我再问一下,不用异步选择机制可以吗??最好,那位高手给出代码,因为我没有写代码的思路