资源描述:
《MFC下CSocket编程详解》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、MFC下CSocket编程详解:1.常用的函数和注意事项(详细的函数接口说明请查看MSDN):CSocket::Create初始化(一般写服务器程序都不要用为好,用下面的CSocket::Socket初始化)CSocket::Socket初始化CSocket::SetSockOpt设置socket选项CSocket::Bind绑定地址端口CSocket::Connect连接CSocket::Listen监听CSocket::Accept接收外部连接的socketCSocket::Send发送内容CSocket::Receive接收内容CSocket::Close关闭(不等于delete
2、)1)在使用MFC编写socket程序时,必须要包含头文件。2)AfxSocketInit()这个函数,在使用CSocket前一定要先调用该函数,否则使用CSocket会出错;并且该函数还有一个重要的使用方式,就是在某个线程下使用CSocket前一定要调用,就算主线程调用了该函数,在子线程下使用CSocket也要先调用该函数,要不会出错。3)还要注意的是,Create方法已经包含了Bind方法,如果是以Create方法初始化的前提下不能再调用Bind,要不一定出错。2.以下是使用例子代码,通过例子来学习如何使用CSocket进行编程,1)客户端主要代码://初始化
3、AfxSocketInit();//创建CSocket对象CSocketaSocket;CStringstrIP;CStringstrPort;CStringstrText;this->GetDlgItem(IDC_EDIT_IP)->GetWindowText(strIP);this->GetDlgItem(IDC_EDIT_PORT)->GetWindowText(strPort);this->GetDlgItem(IDC_EDIT_TEXT)->GetWindowText(strText);//初始化CSocket对象,因为客户端不需要绑定任何端口和地址,所以用默认参数即可if(
4、!aSocket.Create())...{charszMsg[1024]=...{0};sprintf(szMsg,"createfaild:%d",aSocket.GetLastError());AfxMessageBox(szMsg);return;}//转换需要连接的端口内容类型intnPort=atoi(strPort);//连接指定的地址和端口if(aSocket.Connect(strIP,nPort))...{charszRecValue[1024]=...{0};//发送内容给服务器aSocket.Send(strText,strText.GetLength());/
5、/接收服务器发送回来的内容(该方法会阻塞,在此等待有内容接收到才继续向下执行)aSocket.Receive((void*)szRecValue,1024);AfxMessageBox(szRecValue);}else...{charszMsg[1024]=...{0};sprintf(szMsg,"createfaild:%d",aSocket.GetLastError());AfxMessageBox(szMsg);}//关闭aSocket.Close();2)服务器端代码:unsignedintStartServer(LPVOIDlParam)...{//初始化Winscoki
6、f(!AfxSocketInit())...{AfxMessageBox(IDP_SOCKETS_INIT_FAILED);return1;}m_exit=false;CServerDlg*aDlg=(CServerDlg*)lParam;CStringstrPort;aDlg->GetDlgItemText(IDC_EDIT_PORT,strPort);UINTnPort=atoi(strPort);//socket------------------------------------------------CSocketaSocket,serverSocket;//最好不要使用a
7、Socket.Create创建,因为容易会出现10048错误if(!aSocket.Socket())...{charszError[256]=...{0};sprintf(szError,"CreateFaild:%d",GetLastError());AfxMessageBox(szError);return1;}BOOLbOptVal=TRUE;intbOptLen=sizeof(BOOL);//设置Socket的选项,解决10048错误