Windows下socket编程(console非MFC)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Windows下socket编程(console非MFC),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3079字,纯文字阅读大概需要5分钟。
内容图文
![Windows下socket编程(console非MFC)](/upload/InfoBanner/zyjiaocheng/961/091794dc02f9479eb1921e023548caca.jpg)
console控制台:使用<winsock2.h> 和 ws2_32.lib
////// TcpSrv.cpp ///////// #define _CRT_SECURE_NO_WARNINGS //用sprintf,而不必强制使用sprintf_s 不报错 #include <winsock2.h> #include <iostream> using namespace std; #pragma comment(lib,"ws2_32.lib") void main() { WORD wVersionRequested; WSADATA wsaData; int err; wVersionRequested = MAKEWORD(1, 1); //WSAStartup() initiates use of Ws2_32.dll by a process. err = WSAStartup(wVersionRequested, &wsaData); if (err != 0) { return; } if (LOBYTE(wsaData.wVersion) != 1 || HIBYTE(wsaData.wVersion) != 1) { WSACleanup(); return; } //1.创建流式套接字,基于TCP(SOCK_STREAM) SOCKET sockSrv = socket(AF_INET, SOCK_STREAM, 0); //socket地址结构体 SOCKADDR_IN addrSrv;//除了sin_family,其余都需要转换为网络字节序 addrSrv.sin_family = AF_INET; addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY);//转换Unsigned long型为网络字节序格式, INADDR_ANY表示接受多个IP地址的回应信息 addrSrv.sin_port = htons(6000);//端口6000,转换unsigned short为网络字节序 //2.将套接字绑定到一个端口号和本地地址上 bind(sockSrv, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR)); //3.监听 listen(sockSrv, 5); // SOCKADDR_IN addrClient;//定义用来接收客户端Socket的结构体 int len = sizeof(SOCKADDR);//初始化参数,这个参数必须进行初始化 //4.循环等待接受客户端发送请求 while (true) { //等待客户请求到来;当请求到来后,接受连接请求, //返回一个新的对应于此次连接的套接字(sockConnect)。 //接受Client请求,阻塞 SOCKET sockConnect = accept(sockSrv, (SOCKADDR*)&addrClient, &len); //发送数据 char buf[100];//inet_ntoa(addrClient.sin_addr)将IP地址转换为字符串,像 "192.168.0.5" sprintf(buf, "Welcome %s to my little world.", inet_ntoa(addrClient.sin_addr)); send(sockConnect, buf, strlen(buf) + 1, 0);//多发一个,为了\0结尾 //接收数据 char recvBuf[100] = { 0 }; recv(sockConnect, recvBuf, sizeof(recvBuf), 0); cout << recvBuf << endl; //5.关闭socket closesocket(sockConnect); } // WSACleanup(); return ; } ////////////////////////////////////////////////////////// ///////// TcpClient.cpp //////////// #define _CRT_SECURE_NO_WARNINGS //用sprintf,而不必强制使用sprintf_s 不报错 #include <winsock2.h> #include <iostream> using namespace std; #pragma comment(lib,"ws2_32.lib") void main() { WORD wVersionRequested; WSADATA wsaData; int err; wVersionRequested = MAKEWORD(1, 1); //WSAStartup() initiates use of Ws2_32.dll by a process. err = WSAStartup(wVersionRequested, &wsaData); if (err != 0) { return; } if (LOBYTE(wsaData.wVersion) != 1 || HIBYTE(wsaData.wVersion) != 1) { WSACleanup(); return; } //1.创建Client端的Socket SOCKET sockClient = socket(AF_INET, SOCK_STREAM, 0); //2.连接Server地址 SOCKADDR_IN addrSrv; addrSrv.sin_family = AF_INET; addrSrv.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");//inet_addr 将IP字符串转为ULONG类型数值 addrSrv.sin_port = htons(6000);//Port:6000 connect(sockClient, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR)); //接收 char recvBuf[100] = { 0 }; recv(sockClient, recvBuf, sizeof(recvBuf), 0); cout << recvBuf << endl; //发送 char* buf = "This is lisi."; send(sockClient, buf, strlen(buf) + 1, 0); //3.关闭套接字 closesocket(sockClient); WSACleanup();//终止套接字库的使用 }
MFC的Socket通信:使用#include <afxsock.h>中MFC封装的类CSocket
内容总结
以上是互联网集市为您收集整理的Windows下socket编程(console非MFC)全部内容,希望文章能够帮你解决Windows下socket编程(console非MFC)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。