学习MFC下的TCP编程.docx
《学习MFC下的TCP编程.docx》由会员分享,可在线阅读,更多相关《学习MFC下的TCP编程.docx(21页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、目录1、得到本机IP和主机名2得到本地主机名3主机名和IP地址32、设置某个按钮不可用:43、控制台下socket通信4、服务器端4、客户端端64、MFC下TCP编程(只能服务器发,客户端收)7、服务器端9、客户端105、MFC下TCP编程(可以互发)12服务器端121、在*Dlg*.h中添加:132、在protected:下添加133、在Dlg.cpp中添加内容134、添加自定义消息响应函数135、添加变量146、启动服务器按钮对应的响应函数内容为:157、关闭服务器按钮对应的消息响应函数内容为:168、发送按钮对应的消息响应函数内容为:16、客户端171、在*Dlg*.h中添加:182、在
2、protected:下添加183、在Dlg.cpp中添加内容184、添加自定义消息响应函数19文档:wln Email- jlu.wlnvery glad you read my document,hope it can help you ,my friend!1、得到本机IP和主机名首先添加ws2_32.lib库文件;再添加头文件 #include程序:UpdateData(true);char hostname128 = ; WSADATA wsaData;CString ip; WSAStartup(MAKEWORD(2, 2), &wsaData); gethostname(hostn
3、ame, sizeof(hostname); /printf(%s, hostname);SetDlgItemText(IDC_STATIC1,hostname);/name里是本机名 hostent* host = gethostbyname(hostname);sockaddr_in addre;for (int i = 0;host-h_addr_listi;i+)CString ip;memcpy(&addre.sin_addr.s_addr,host-h_addr_list0,host-h_length);ip = inet_ntoa(addre.sin_addr);SetDlgIt
4、emText(IDC_STATIC2,ip); WSACleanup();UpdateData(false);得到本地主机名#include#include#pragma comment(lib, Ws2_32.lib)int main() char hostname 128 = ; WSADATA wsaData; WSAStartup(MAKEWORD(2, 2), &wsaData); gethostname(hostname, sizeof(hostname); printf(%s, hostname); WSACleanup(); return 0; 主机名和IP地址/连接 ws2_
5、32.libWORD wVersionRequested; WSADATA wsaData; char name255; CString ip;int err; PHOSTENT hostinfo; wVersionRequested = MAKEWORD( 2, 2 );/版本号2.2 /1.加载套接字库 err = WSAStartup( wVersionRequested, &wsaData ); if ( err != 0 ) return; /判断是否我们请求的winsocket版本,如果不是 /则调用WSACleanup终止winsocket的使用并返回 if ( LOBYTE(
6、wsaData.wVersion ) != 2 | HIBYTE( wsaData.wVersion ) != 2 ) WSACleanup( ); return; /.ifif ( err = 0 ) if( gethostname ( name, sizeof(name) = 0) if(hostinfo = gethostbyname(name) != NULL) ip = inet_ntoa (*(struct in_addr *)*hostinfo-h_addr_list); WSACleanup( ); SetDlgItemText(IDC_STATIC1,name);/name里
7、是本机名 SetDlgItemText(IDC_STATIC2,ip); /ip中是本机IP UpdateData(false);2、设置某个按钮不可用:m_StartBtn.EnableWindow(TRUE); /可用m_StopBtn.EnableWindow(FALSE); /不可用3、控制台下socket通信首先添加ws2_32.lib库文件;再添加头文件 #include、服务器端/ TCPConsolSer2.cpp : Defines the entry point for the console application./#include stdafx.h#include #
8、include int main(int argc, char* argv)WORD wVersionRequested;/版本号 wVersionRequested = MAKEWORD(1, 1);/1.1版本的套接字SOCKET sersock,clisock;struct sockaddr_in seraddr,cliaddr;int serport=5556;char buf256;WSADATA wsaData;int len,err;/初始化Winsockerr = WSAStartup(wVersionRequested, &wsaData);if (err != 0) pri
9、ntf(加载套接字库失败!n);return -1; if (LOBYTE(wsaData.wVersion) != 1 | HIBYTE(wsaData.wVersion) != 1) return -1; /判断高低字节是不是1,如果不是1.1的版本则退出 /创建套接字printf(创建套接字.n);sersock = socket(AF_INET, SOCK_STREAM, 0); /Socket地址结构体的创建memset(&seraddr,0,sizeof(seraddr);seraddr.sin_family=AF_INET;seraddr.sin_port=htons(serpo
10、rt);/seraddr.sin_addr.S_un.S_addr=htonl(INADDR_ANY); /等价于seraddr.S_un.sin_addr=inet_addr(127.0.0.1);seraddr.sin_addr.S_un.S_addr=inet_addr(127.0.0.1);/绑定套接字到服务器地址结构printf(Binding.n);err=bind(sersock, (SOCKADDR*)&seraddr, sizeof(SOCKADDR);if(err!=0)printf(listen failed:%dn,WSAGetLastError();exit(-3);
11、/监听套接字printf(listening.n);err=listen(sersock,5);if(err!=0)printf(listen failed:%dn,WSAGetLastError();exit(-2);/等待连接请求printf(waitting request.n);len = sizeof(cliaddr);/初始化参数,这个参数必须进行初始化clisock=accept(sersock,(SOCKADDR*)&cliaddr, &len);printf(Accept client: %s: port: %dn,inet_ntoa(cliaddr.sin_addr),nt
12、ohs(cliaddr.sin_port);sprintf(buf,welcome %s,inet_ntoa(cliaddr.sin_addr);send(clisock,buf,strlen(buf),0);/关闭连接closesocket(clisock);closesocket(sersock);WSACleanup();return 0;、客户端端/ TCPConsoleClient2.cpp : Defines the entry point for the console application./#include stdafx.h#include #include int mai
13、n(int argc, char* argv)WORD wVersionRequested;/版本号 wVersionRequested = MAKEWORD(1, 1);/1.1版本的套接字SOCKET sock;struct sockaddr_in sockaddr;int serport=5556 ;char buf256;WSADATA wsaData;int len,err;/初始化Winsockerr = WSAStartup(wVersionRequested, &wsaData);if (err != 0) printf(加载套接字库失败!n);return -1; if (L
14、OBYTE(wsaData.wVersion) != 1 | HIBYTE(wsaData.wVersion) != 1) return -1; /判断高低字节是不是1,如果不是1.1的版本则退出 /创建套接字printf(创建套接字.n);sock = socket(AF_INET, SOCK_STREAM, 0); /Socket地址结构体的创建memset(&sockaddr,0,sizeof(sockaddr);sockaddr.sin_family=AF_INET;sockaddr.sin_port=htons(serport);/seraddr.sin_addr.S_un.S_ad
15、dr=htonl(INADDR_ANY); /等价于seraddr.S_un.sin_addr=inet_addr(127.0.0.1);sockaddr.sin_addr.S_un.S_addr=inet_addr(127.0.0.1);/连接服务器err=connect(sock,(SOCKADDR*)&sockaddr,sizeof(SOCKADDR);/接收欢迎词memset(buf,0,sizeof(buf);len=recv(sock,buf,sizeof(buf),0);printf(%sn,buf);/关闭连接closesocket(sock);WSACleanup();ret
16、urn 0;4、MFC下TCP编程(只能服务器发,客户端收)首先添加ws2_32.lib库文件;再添加头文件 #include点击服务器“发送”按钮,将数据发送过去;点击客户端”接收”按钮,接收服务器发送来的数据,并显示。、服务器端界面:接收、发送数据均为EDIT,ID分别为IDC_EDIT_RECV,IDC_EDIT_SEND发送按钮的消息响应函数为:UpdateData(true);WORD wVersionRequested;/版本号 wVersionRequested = MAKEWORD(1, 1);/1.1版本的套接字WSADATA wsaData;/初始化Winsockint e
17、rr;err = WSAStartup(wVersionRequested, &wsaData);if (err != 0) return; if (LOBYTE(wsaData.wVersion) != 1 | HIBYTE(wsaData.wVersion) != 1) return; /判断高低字节是不是1,如果不是1.1的版本则退出 /创建套接字SOCKET sersock;sersock = socket(AF_INET, SOCK_STREAM, 0); /Socket地址结构体的创建struct sockaddr_in seraddr;int serport=5556;memse
18、t(&seraddr,0,sizeof(seraddr);seraddr.sin_family=AF_INET;seraddr.sin_port=htons(serport);/seraddr.sin_addr.S_un.S_addr=htonl(INADDR_ANY); /等价于seraddr.S_un.sin_addr=inet_addr(127.0.0.1);seraddr.sin_addr.S_un.S_addr=inet_addr(127.0.0.1);/绑定套接字到服务器地址结构err=bind(sersock, (SOCKADDR*)&seraddr, sizeof(SOCKAD
19、DR);if(err!=0)exit(-3);/监听套接字err=listen(sersock,5);if(err!=0)exit(-2);/套接字clisock上接收到数据时,向窗口发送自定义消息RECEIVE_EVENT/WSAAsyncSelect(clisock,GetSafeHwnd(),RECEIVE_EVENT,FD_READ);int len;struct sockaddr_in cliaddr;len = sizeof(cliaddr);/初始化参数,这个参数必须进行初始化SOCKET clisock;clisock=accept(sersock,(SOCKADDR*)&cl
20、iaddr, &len); /接受客户端的请求,创建一个新的socket。char buf256;memset(buf,0,sizeof(buf);/printf(Accept client: %s: port: %dn,inet_ntoa(cliaddr.sin_addr),ntohs(cliaddr.sin_port);CString name=小明;sprintf(buf,%s %srn,inet_ntoa(cliaddr.sin_addr),name);CString str;GetDlgItem(IDC_EDIT_SEND)-GetWindowText(str);send(cliso
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学习 MFC TCP 编程
限制150内