• 基于TCPIP的网络编程(C++语言编程)


    讲解视频连接:https://www.bilibili.com/video/av36095519

    基于TCP/IP的通信基本上都是利用SOCKET套接字进行数据通讯,程序一般分为服务器端和用户端两部分。设计思路(visual studio下):

    第一部分 服务器端
      一、创建服务器套接字(create)。
      二、服务器套接字进行信息绑定(bind),并开始监听连接(listen)。
      三、接受来自用户端的连接请求(accept)。
      四、开始数据传输(send/receive)。
      五、关闭套接字(closesocket)。

    第二部分 客户端
      一、创建客户套接字(create)。
      二、与远程服务器进行连接(connect),如被接受则创建接收进程。
      三、开始数据传输(send/receive)。
      四、关闭套接字(closesocket)。

    service:

    #include
    #include
    #include  //WindowsSocket编程头文件
    #include
    #include
    #pragma comment(lib,"ws2_32.lib")//链接ws2_32.lib库文件到此项目中
    using namespace std;
    
    //================全局常量==================
             //创建缓冲区
    const int BUF_SIZE = 2048;
    //================全局变量==================
    SOCKET sockSer, sockCli;
    SOCKADDR_IN addrSer, addrCli; //address
    int naddr = sizeof(SOCKADDR_IN);
    
    char sendbuf[BUF_SIZE];
    char inputbuf[BUF_SIZE];
    char recvbuf[BUF_SIZE];
    //================函数声明==================
    int main() {
    	cout << "服务器启动" << endl;
    	//加载socket库
    	WSADATA wsadata;
    	if (WSAStartup(MAKEWORD(2, 2),&wsadata) != 0)
    	{
    		//输出出错信息
    		cout << "载入socket库失败!" << endl;
    		system("pause");
    		return 0;
    	}
    	else {
    		cout << "载入socket库成功!" << endl;
    	}
    	//创建Soucket;
    	sockSer = socket(AF_INET, SOCK_STREAM, 0);
    	//描述协议族,INET属于ipv4;
    	//sock_stream创建套接字类型:tcp;
    	//0不指定协议,常用的协议有tcp、udp等
    
    	//初始化地址包
    	addrSer.sin_addr.s_addr = inet_addr("192.168.138.1");
    	addrSer.sin_family = AF_INET;
    	addrSer.sin_port = htons(1111);
    
    	//绑定Socket(bind)
    	bind(sockSer, (SOCKADDR*)&addrSer, sizeof(SOCKADDR));
    	//强制将SOCKADDR_INET转化成SOCKEADDR
    
    	//监听
    	while (true) {
    		cout << "开始连接!" << endl;
    		//监听连接请求;
    		listen(sockSer,5);
    		//等待连接最大数:5
    
    		//接受连接
    		sockCli=accept(sockSer, (SOCKADDR*)&addrCli, &naddr);
    		if (sockCli != INVALID_SOCKET) {
    			while (true)
    			{
    				cout << "连接成功" << endl;
    				cout << "请输入要发送给客户端的信息:" << endl;
    				cin >> sendbuf;
    				send(sockCli, sendbuf, sizeof(sendbuf), 0);
    				//strcpy(sendbuf, "hello");
    				//send(sockCli, sendbuf, sizeof(sendbuf), 0);
    
    				//接收客户端发来信息
    				recv(sockCli, recvbuf, sizeof(recvbuf), 0);
    				cout << "客户端发来的信息:" << recvbuf << endl;
    			}
    			
    		}
    		else
    		{
    			cout << "连接失败!" << endl;
    		}
    	}
    	closesocket(sockSer);
    	closesocket(sockCli);
    	return 0;
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84

    client:

    #include
    #include
    #include  //WindowsSocket编程头文件
    #include
    #include
    #pragma comment(lib,"ws2_32.lib")//链接ws2_32.lib库文件到此项目中
    using namespace std;
    
    //================全局常量==================
    //创建缓冲区
    const int BUF_SIZE = 2048;
    //================全局变量==================
    SOCKET sockSer, sockCli;
    SOCKADDR_IN addrSer, addrCli; //address
    int naddr = sizeof(SOCKADDR_IN);
    
    char sendbuf[BUF_SIZE];
    char inputbuf[BUF_SIZE];
    char recvbuf[BUF_SIZE];
    //================函数声明==================
    int main() {
    	//加载socket库
    	cout << "客户端启动" << endl;
    	WSADATA wsadata;
    	if (WSAStartup(MAKEWORD(2, 2), &wsadata) != 0)
    	{
    		//输出出错信息
    		cout << "载入socket库" << endl;
    		system("pause");
    		return 0;
    	}
    	//创建Soucket;
    	sockCli = socket(AF_INET, SOCK_STREAM, 0);
    	//描述协议族,INET属于ipv4;
    	//sock_stream创建套接字类型:tcp;
    	//0不指定协议,常用的协议有tcp、udp等
    
    	//初始化客户端地址包
    	addrCli.sin_addr.s_addr = inet_addr("127.0.0.1");
    	addrCli.sin_family = AF_INET;
    	addrCli.sin_port = htons(1111);
    
    	//初始化服务器地址
    	addrSer.sin_addr.s_addr = inet_addr("192.168.138.1");
    	addrSer.sin_family = AF_INET;
    	addrSer.sin_port = htons(1111);
    
    	while (true)
    	{
    		if (connect(sockCli, (SOCKADDR*)&addrSer, sizeof(addrSer))!=SOCKET_ERROR)
    		{
    			while (true)
    			{
    				//接收服务器信息
    				cout << "客户端连接成功" << endl;
    				recv(sockCli, recvbuf, sizeof(recvbuf), 0);
    				cout << "服务端发的信息:" << recvbuf << endl;
    				//发送给服务器信息
    				cout << "请输入要发送给服务器的信息:" << endl;
    				cin >> sendbuf;
    
    				send(sockCli, sendbuf, sizeof(sendbuf), 0);
    				cout << "发送成功" << endl;
    			}
    			
    		}
    		else
    		{
    			//cout << "客户端连接失败" << endl;
    		}
    	}
    	closesocket(sockSer);
    	closesocket(sockCli);
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
  • 相关阅读:
    R 语言patchwork包拼图间隙
    数据链路层-概述
    JAVA自行车在线租赁管理系统2021计算机毕业设计Mybatis+系统+数据库+调试部署
    自然语言处理应用(二):自然语言推断
    “热帖”统计
    Docker容器中杀死僵尸进程、jobs命令
    setState是同步更新还是异步更新的
    Python-使用openpyxl读取excel内容
    matlab学习笔记(五)
    A_Machine_Vision_Apparatus_and_Method_for_Can-End_Inspection-论文阅读笔记
  • 原文地址:https://blog.csdn.net/m0_54866636/article/details/126565569