有个关于网络编程的异常,麻烦帮小弟看看
有个关于网络编程的错误,麻烦帮小弟看看!
这个是发送消息线程,但是有错,我调试了,每次执行到sockClient.Create();就出错,但是我不知道这句话错在哪里了,求指点
------解决方案--------------------
初始化socket
wsastartup(xxx)
------解决方案--------------------
启动Winsock服务WSAStartup()
格式:int WSAStartup(WORD wVersionRequested,LPWSADATA lpWASData);
功能:此函数是对Windows Sockets DLL进行初始化,只有此函数调用成功后才可以调用其他Windows Sockets DLL的函数。
------解决方案--------------------
估计是没加载套接字库
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 2, 2 );
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 ) {
/* Tell the user that we could not find a usable */
/* WinSock DLL. */
return;
}
/* Confirm that the WinSock DLL supports 2.2.*/
/* Note that if the DLL supports versions greater */
/* than 2.2 in addition to 2.2, it will still return */
/* 2.2 in wVersion since that is the version we */
/* requested. */
if ( LOBYTE( wsaData.wVersion ) != 2 ||
HIBYTE( wsaData.wVersion ) != 2 ) {
/* Tell the user that we could not find a usable */
/* WinSock DLL. */
WSACleanup( );
return;
}
/* The WinSock DLL is acceptable. Proceed. */
Declared in Winsock2.h.
------解决方案--------------------
------解决方案--------------------
WSAGetLastError()
这个是发送消息线程,但是有错,我调试了,每次执行到sockClient.Create();就出错,但是我不知道这句话错在哪里了,求指点
- C/C++ code
/////TCP发送信息线程////////// UINT _SendMsgThread(LPVOID lparam) { // CTestDlg *pDlg=(CTestDlg *)lparam; //if(pDlg->StopServer==true) return -1; //pThreadLisen=::AfxBeginThread(_ListenTcpThread,this); //开始TCP线程 CSocket sockClient; sockClient.Create(); CString ip,strError; //pDlg->m_You_IP.GetWindowText(ip); int conn=sockClient.Connect(otherip, PORT+pDlg->m_client); if(conn==0) /////////////////////////////////// { AfxMessageBox("_SendMsgThread Connect错误!"+pDlg->GetError(GetLastError())); sockClient.ShutDown(2); sockClient.Close(); AfxEndThread(1L); return 0; } //首先发送标记M为信息,2 int end=0; end=sockClient.Send("M",FLAG); if(end==SOCKET_ERROR) { AfxMessageBox("_SendMsgThread Send错误!"+pDlg->GetError(GetLastError())); return -1; } else if(end!=2) { AfxMessageBox("消息头错误"); return -1; } CString strMsg=pDlg->m_MsgSend; end=sockClient.Send(strMsg,strMsg.GetLength()); if(end==SOCKET_ERROR) { AfxMessageBox("_SendMsgThread Send错误!"+pDlg->GetError(GetLastError())); return -1; } CString strLocalName; pDlg->GetLocalHostName(strLocalName); CString strLocalIP; pDlg->GetIpAddress(strLocalName,strLocalIP); pDlg->AddMsgList(strLocalIP+"->"+strLocalName,strMsg); int i=0; sockClient.Close(); return 0; }
------解决方案--------------------
初始化socket
wsastartup(xxx)
------解决方案--------------------
启动Winsock服务WSAStartup()
格式:int WSAStartup(WORD wVersionRequested,LPWSADATA lpWASData);
功能:此函数是对Windows Sockets DLL进行初始化,只有此函数调用成功后才可以调用其他Windows Sockets DLL的函数。
------解决方案--------------------
估计是没加载套接字库
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 2, 2 );
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 ) {
/* Tell the user that we could not find a usable */
/* WinSock DLL. */
return;
}
/* Confirm that the WinSock DLL supports 2.2.*/
/* Note that if the DLL supports versions greater */
/* than 2.2 in addition to 2.2, it will still return */
/* 2.2 in wVersion since that is the version we */
/* requested. */
if ( LOBYTE( wsaData.wVersion ) != 2 ||
HIBYTE( wsaData.wVersion ) != 2 ) {
/* Tell the user that we could not find a usable */
/* WinSock DLL. */
WSACleanup( );
return;
}
/* The WinSock DLL is acceptable. Proceed. */
Declared in Winsock2.h.
------解决方案--------------------
------解决方案--------------------
WSAGetLastError()