-
-
[原创]C++ 代码整理 《Visual C++ 网络编程案例实战》
-
2021-5-13 14:06 5959
-
C++ 代码整理 《Visual C++ 网络编程案例实战》
前言
该文章主要是记录代码,共以后快速编写相关功能参考。其中代码主要是由书籍“Visual C++ 网络编程案例实战”而来。因原书中代码较早,其中部分库或者函数已经弃用。所以本文章中代码已经做了部分修改。下图是如今调试环境。
一;Socket套接字编程
1.1;TCP服务器
#include <WinSock2.h> #include <stdio.h> #include <Windows.h> #include <WS2tcpip.h> //inet_ntop()包含 #pragma comment(lib,"WS2_32.lib") //显示连接套接字库 int main() { //1;初始化套接字库 WSADATA data; //定义WSADATA结构体对象 WORD w = MAKEWORD(2, 0); //定义版本号码 char sztext[] = "你好\r\n"; ::WSAStartup(w, &data); //初始化套接字库 SOCKET s, s1; //定义连接套接字和数据收发套接字句柄 s = ::socket(AF_INET, SOCK_STREAM, 0); //创建TCP套接字 sockaddr_in addr, addr2; //定义套接字地址结构 int n = sizeof(addr2); //获取套接字地址结构大小 //初始化地址结构 addr.sin_family = AF_INET; //指定地址家族TCP/IP addr.sin_port = htons(75); //指定端口号 addr.sin_addr.S_un.S_addr = INADDR_ANY; //表示服务器接收任何计算机发来请求 //2;绑定套接字 ::bind(s, (sockaddr*)&addr, sizeof(addr)); //绑定套接字 ::listen(s, 5); //监听套接字 printf_s("服务器已经启动\n"); //输出提示信息 //3;启动监听 while (true) { s1 = ::accept(s, (sockaddr*)&addr2, &n); //接受连接请求 if (s1 != NULL) { //printf_s("%s已经连接成功\r\n", inet_ntoa(addr2.sin_addr)); char IPdoter[20]; printf_s("%s已经连接成功\r\n", inet_ntop(AF_INET, &addr2.sin_addr, IPdoter, 16)); ::send(s1, sztext, sizeof(sztext), 0); //向客户端发送字符数组 } ::closesocket(s); //关闭套接字句柄 ::closesocket(s1); ::WSACleanup(); //释放套接字库 if (getchar()) return 0; else { ::Sleep(100); } } }
1.2;UDP服务器
#include <WinSock2.h> #include <stdio.h> #include <windows.h> #include <WS2tcpip.h> #pragma comment(lib,"WS2_32.lib") //连接套接字库 int main() { WSADATA data; WORD w = MAKEWORD(2, 0); ::WSAStartup(w, &data); SOCKET s; s = ::socket(AF_INET, SOCK_DGRAM, 0); sockaddr_in addr, addr2; int n = sizeof(addr2); char buff[10] = { 0 }; addr.sin_family = AF_INET; addr.sin_port = htons(76); //addr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1"); inet_pton(AF_INET, "127.0.0.1", &addr.sin_addr.S_un.S_addr); //inet_pton 用来替换inet_addr printf_s("UDP客户端已经启动\r\n"); char sztext[] = "你好\r\n"; //发送消息 if (::sendto(s, sztext, sizeof(sztext), 0, (sockaddr*)&addr, n) != 0); { ::recvfrom(s, buff, 10, 0, (sockaddr*)&addr2, &n); //接收消息 printf_s("服务器说:%s\r\n", buff); ::closesocket(s); ::WSACleanup(); } if (getchar()) { return 0; } else { ::Sleep(100); } }
赞赏
他的文章
[分享]应急响应工具-日志分析
4376
[原创]MEMZ彩虹病毒分析
14642
[原创]恶意程序分析-去除恶意程序混淆-学习记录
12190
[原创]Ret2libc 学习记录笔记
14352
[原创]基本语句逆向分析
11140
看原图