首页
社区
课程
招聘
[原创]C++ 代码整理 《Visual C++ 网络编程案例实战》
2021-5-13 14:06 5959

[原创]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);
	}
}



[CTF入门培训]顶尖高校博士及硕士团队亲授《30小时教你玩转CTF》,视频+靶场+题目!助力进入CTF世界

收藏
点赞2
打赏
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回