#include #include #include._tcp client 模式">搜索查看编辑修改首页UNITYNODEJSPYTHONAIGITPHPGOCEF3JAVAHTMLCSS搜索运维做开发 这个屌丝很懒,什么也没留下! 关注作者热门标签jqueryHTMLCSSPHPASPPYTHONGOAICC++C#PHOTOSHOPUNITYiOSandroidvuexml爬虫SEOLINUXWINDOWSJAVAMFCCEF3CADNODEJSGITPyppeteerarticle热门文章1重生之我 学习【数据结构之顺序表(SeqList)】2数据可视化的方法总结_有x,y,z以及u(x,y,z)的数据怎么可视化3苹果手机视频传输教程-通过无线将电脑上视频传到手机4c#获取json数组里指定参数_c#获取json字段中指定值5数据安全:巧妙解决由密码过期导致的用户锁定问题6【Rust日报】mistral.rs 比 llama.cpp 在大部的CUDA GPU上都快了7基于JavaSwing + MySQL 的学生选课管理系统,附带5千字报告8yum&apt安装指定版本的软件包_yum安装指定版本的软件包的方法9GIT仓库使用规范_git仓库规范方案10Android Studio学习:安装Android Studio和汉化教程_android studio汉化安装教程当前位置: article > 正文 TCP模式的一个服务器和多个客户端通信_tcp client 模式 作者:运维做开发 | 2024-08-08 20:06:30 赞踩tcp client 模式 服务端 #define _WINSOCK_DEPRECATED_NO_WARNINGS #define _CRT_SECURE_NO_WARNINGS#include <WinSock2.h>#include <WS2tcpip.h>#pragma comment(lib,"ws2_32.lib")#include <stdio.h>#include <Windows.h>#include <conio.h>#include <map>#include <algorithm>#include <string>#include <vector>#include <iostream>using std::string;using std::map;using std::vector;map<USHORT, SOCKET> socketMap; //发送数据void WINAPI SendMsg(){ while (1) { // '+' 43 // '/' 47 // '*' 42 int key = _getch(); if (key == 43) //发送消息 { printf("【*】群发【/】单发\n"); key = _getch(); printf("发送内容:"); char sendStr[100] = {}; gets_s(sendStr, sizeof(sendStr)); //scanf("%s",sendStr); int sendRet = 0; if(key == 42 ) //群发 { for (auto inter = socketMap.begin(); inter != socketMap.end(); ++inter) { SOCKET clientSocket = inter->second; sendRet = send(clientSocket, sendStr, strlen(sendStr), 0); } } else if(key == 47) //单发 { printf("客户端端口号:"); int hostPort = 0; //scanf("%d",&port); char temp[100] = {}; gets_s((char*)&temp, sizeof(temp)); sscanf(temp, "%d", &hostPort); if (socketMap.find(hostPort) != socketMap.end()) { SOCKET clientSocket = socketMap.at(hostPort); sendRet = send(clientSocket, sendStr, strlen(sendStr), 0); } else { printf("输入端口号有误\n"); continue; } } if(sendRet != 0) printf("已发送\n"); else printf("发送失败\n"); } }} //接收客户端数据DWORD WINAPI RecvMsg(SOCKET* clientSocket){ //int threadId = GetCurrentThreadId(); //int n = 5; while (1) { char recvStr[10000] = {}; int recvRet = recv(*clientSocket, recvStr, sizeof(recvStr), 0); if (recvRet != -1 && recvRet != 0) printf("thread【%d】:%s\n=========\n", (int)GetCurrentThreadId(), recvStr); else { auto retVal = std::find_if(socketMap.begin(), socketMap.end(), [clientSocket](map<USHORT, SOCKET>::value_type val) { return val.second == *clientSocket; }); if (retVal != socketMap.end()) { printf("客户端%d已断开\n", retVal->first); closesocket(retVal->second); socketMap.erase(retVal); break; } else { printf("没有该客户端\n"); } } } return 0;} int main(){ CreateThread(0, 0, (LPTHREAD_START_ROUTINE)SendMsg, 0, 0, 0); WSADATA wsaData = { 0 }; WSAStartup(MAKEWORD(2,2),&wsaData); SOCKET serverSocket = socket(AF_INET,SOCK_STREAM,0); sockaddr_in sockaddr; sockaddr.sin_family = AF_INET; sockaddr.sin_addr.S_un.S_addr = INADDR_ANY; //监听本机任意IP地址的8888端口 //sockaddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1"); sockaddr.sin_port = htons(8888); int bindRet = bind(serverSocket, (SOCKADDR*)&sockaddr, sizeof(sockaddr)); if (bindRet == SOCKET_ERROR) { printf("绑定失败\n"); closesocket(serverSocket); WSACleanup(); getchar(); exit(0); } int listenRet = listen(serverSocket, 3); if (listenRet == -1) { printf("监听失败\n"); closesocket(serverSocket); WSACleanup(); system("pause"); return 0; } printf("监听中...\n"); while (1) { SOCKADDR_IN clientSockAddr_in = {}; int len = sizeof(clientSockAddr_in); SOCKET clientSocket = accept(serverSocket, (SOCKADDR*)&clientSockAddr_in, &len); printf("有客户端连接\n"); printf("ip=%s,port=%d\n", inet_ntoa(clientSockAddr_in.sin_addr), ntohs(clientSockAddr_in.sin_port)); socketMap[ntohs(clientSockAddr_in.sin_port)] = clientSocket; CreateThread(0, 0, (LPTHREAD_START_ROUTINE)RecvMsg, &socketMap[ntohs(clientSockAddr_in.sin_port)], 0, 0); }} 客户端 #define _WINSOCK_DEPRECATED_NO_WARNINGS #define _CRT_SECURE_NO_WARNINGS #include <WinSock2.h>#include <WS2tcpip.h>#pragma comment(lib,"ws2_32.lib")#include <stdio.h>#include <iostream> DWORD WINAPI RecvMsg(const SOCKET* clientSocket){ while (1) { char recvStr[100] = {}; int recvRet = recv(*clientSocket, recvStr, sizeof(recvStr), 0); if (recvRet != -1) printf("服务器说:%s\n", recvStr); else { printf("服务器已断开\n"); closesocket(*clientSocket); WSACleanup(); system("pause"); closesocket(*clientSocket); WSACleanup(); exit(0); } } return 0;} int main(){ WSADATA wsaData = { 0 }; WSAStartup(MAKEWORD(2, 2), &wsaData); SOCKET clientSocket = socket(AF_INET, SOCK_STREAM, 0); //******bind自定义端口号测试*********/ SOCKADDR_IN clientSockAddr_in = { 0 }; clientSockAddr_in.sin_family = AF_INET; clientSockAddr_in.sin_addr.S_un.S_addr = INADDR_ANY; //本机IP clientSockAddr_in.sin_port = htons(2222); if(bind(clientSocket, (SOCKADDR*)&clientSockAddr_in, sizeof(clientSockAddr_in)) == SOCKET_ERROR) { std::cout << "绑定套接字失败\n"; closesocket(clientSocket); WSACleanup(); system("pause"); return 0; } /***************************************/ SOCKADDR_IN sockaddr_in; sockaddr_in.sin_family = AF_INET; sockaddr_in.sin_addr.S_un.S_addr = inet_addr("172.16.20.203"); //inet_addr("192.168.18.173"); //服务端ip地址 //sockaddr_in.sin_addr.S_un.S_addr = inet_addr("192.168.74.128"); sockaddr_in.sin_port = htons(8888); //服务端监听的端口 int conRet = connect(clientSocket,(SOCKADDR*)&sockaddr_in, sizeof(sockaddr_in)); if (conRet != SOCKET_ERROR) { printf("连接成功\n"); CreateThread(0, 0, (LPTHREAD_START_ROUTINE)RecvMsg, &clientSocket, 0, 0); } else { printf("连接失败,返回%d\n", conRet); closesocket(clientSocket); WSACleanup(); } while (1) { printf("输入内容\n"); char sendStr[10000] = {}; //scanf("%s", sendStr); //遇到空格会截断后面内容 gets_s(sendStr, sizeof(sendStr)); int ret = send(clientSocket, sendStr, strlen(sendStr), 0); if (ret != 0) printf("客户端发送数据%dbyte\n", ret); }} 声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/运维做开发/article/detail/949687推荐阅读article2024年最强人工智能AI软件,AI画画,AI写小说,一招帮你搞定_gitmind ai...本文介绍了2024年流行的8款AI工具,包括GitMindAI的思维导图生成、思乎AI助理的写作和对话功能、AI绘画平台... 赞踩article2023-02-22:请用go语言调用ffmpeg,保存mp4文件的视频帧,每帧用ppm图片保存。_...2023-02-22:请用go语言调用ffmpeg,保存mp4文件的视频帧,每帧用ppm图片保存。使用 github.c... 赞踩article[C++] 虚函数、override、final、父类对象与子类对象详解_虚函数父类和子类..." 保护继承 " 和 " 私有继承 " 的 派生类 , 是 不具有 基类 的 完整功能的 , 因为 最终继承 后的派生类... 赞踩article用undetected_chromedriver代替selenium解决浏览器打不开网页_undet...当selenium模拟浏览器打开网页出现空白页时,请试试用undetected_chromedriver来代替selen... 赞踩articleFlink CDC (Mysql为例)_mysqlsource databaselist...本文介绍了如何使用Flink CDC从MySQL数据库实时同步数据,重点在于通过阅读binlog并二次封装,简化用户配置... 赞踩articleJava连接Redis_java链接redis...这篇博客介绍了如何使用Java连接Redis,分别通过Jedis和Lettuce两个库进行操作。首先讲解了Jedis的使... 赞踩article来自工业界的大模型知识库 RAG 服务,有道 QAnything 源码全流程深度解析_qanythi...之前在做大模型知识库 RAG 优化时,主要参考的都是学术界的论文。最近了解到有道 QAnything 开源了,在线试用之... 赞踩article密码服务功能实现方式 笔记_传输的不可否认性二阶段传递信息...1. 概况密码服务功能:(1)机密性;(2)完整性;(3)真实性;(4)不可否认性 密码服务 目的 ... 赞踩article【ARM】v8架构programmer guide(2)_处理器及V8基础...ARMv8-A引入众多改变:在ARMv8中,执行发生在四个异常级别(Exception levels)中的一个。在AAr... 赞踩article协议篇之以太网UDP协议_以太网 udp...TCP/IP协议是指一个协议簇,可以理解为以太网通信协议的集合,在这个集合里面有很多种协议,比如:TCP、IP、UDP等... 赞踩articlePython中的十大图像处理工具_python做图工具...本文主要介绍了一些简单易懂最常用的 Python 图像处理库。当今世界充满了各种数据,而图像是其中高的重要组成部分。然而... 赞踩article解决getPhoneNumber:fail no permission...按照界面提示进行认证,认证时需要支付300元认证费用。大概需要1-3工作日,认证完成后重新启动IDE,然后就可以了。左侧... 赞踩articleQt Event事件详解 (*精*)_qevent* event 的type 转成int...Qt Event事件详解_qevent* event 的type 转成intqevent* event 的type 转成... 赞踩articleTCP/IP详解_tcp 接口...TCP/IP 协议族详解_tcp 接口tcp 接口 T... 赞踩article内网安全-隧道技术&SSH&DNS&ICMP&SMB&上线通讯Linux&Mac 简单总结_内网安全...iptables -A OUTPUT -p tcp --sport 22 -m state --state ESTABL... 赞踩articlefpga 以太网w5500 SPI传输80MHz,Alter FPGA verilog udp驱动源...本文详细介绍了如何在FPGA中使用Verilog实现W5500以太网控制器的SPI驱动,支持80MHz传输速度和8个独立... 赞踩articleERROR 2002 (HY000): Can't connect to local MySQL s...在安装好了MySQL之后,使用了新的配置文件后,MySQL服务器可以成功启动,但在登陆的时候出现了ERROR 2002 ... 赞踩articledocker一键部署EFK系统(elasticsearch filebeat kibana metr...Elasticsearch 是一个实时的、分布式的可扩展的搜索引擎,允许进行全文、结构化搜索,它通常用于索引和搜索大量日... 赞踩article关于探讨对AI人工智能的看法和认知_1.你对现在al技术有什么看法以及举现在运用al技术的例子...本文探讨了人工智能在编程、绘画、设计等方面的现状和未来发展。提到AI技术如GPT、AI绘画和编程工具带来的惊艳,同时也指... 赞踩articleundetected_chromedriver 控制已打开的浏览器_undetected-chrom...undetected_chromedriver 通过端口控制已打开的浏览器时,会打开一个多余的空白窗口,鼠标放在Chro... 赞踩相关标签人工智能AI作画gpt-3chatgpt图像处理机器翻译自然语言处理ffmpeg音视频golangc++开发语言seleniumpython爬虫mysqlflink数据库java容器redis安全SoC硬件架构arm开发
赞
踩
#define _WINSOCK_DEPRECATED_NO_WARNINGS #define _CRT_SECURE_NO_WARNINGS#include <WinSock2.h>#include <WS2tcpip.h>#pragma comment(lib,"ws2_32.lib")#include <stdio.h>#include <Windows.h>#include <conio.h>#include <map>#include <algorithm>#include <string>#include <vector>#include <iostream>using std::string;using std::map;using std::vector;map<USHORT, SOCKET> socketMap; //发送数据void WINAPI SendMsg(){ while (1) { // '+' 43 // '/' 47 // '*' 42 int key = _getch(); if (key == 43) //发送消息 { printf("【*】群发【/】单发\n"); key = _getch(); printf("发送内容:"); char sendStr[100] = {}; gets_s(sendStr, sizeof(sendStr)); //scanf("%s",sendStr); int sendRet = 0; if(key == 42 ) //群发 { for (auto inter = socketMap.begin(); inter != socketMap.end(); ++inter) { SOCKET clientSocket = inter->second; sendRet = send(clientSocket, sendStr, strlen(sendStr), 0); } } else if(key == 47) //单发 { printf("客户端端口号:"); int hostPort = 0; //scanf("%d",&port); char temp[100] = {}; gets_s((char*)&temp, sizeof(temp)); sscanf(temp, "%d", &hostPort); if (socketMap.find(hostPort) != socketMap.end()) { SOCKET clientSocket = socketMap.at(hostPort); sendRet = send(clientSocket, sendStr, strlen(sendStr), 0); } else { printf("输入端口号有误\n"); continue; } } if(sendRet != 0) printf("已发送\n"); else printf("发送失败\n"); } }} //接收客户端数据DWORD WINAPI RecvMsg(SOCKET* clientSocket){ //int threadId = GetCurrentThreadId(); //int n = 5; while (1) { char recvStr[10000] = {}; int recvRet = recv(*clientSocket, recvStr, sizeof(recvStr), 0); if (recvRet != -1 && recvRet != 0) printf("thread【%d】:%s\n=========\n", (int)GetCurrentThreadId(), recvStr); else { auto retVal = std::find_if(socketMap.begin(), socketMap.end(), [clientSocket](map<USHORT, SOCKET>::value_type val) { return val.second == *clientSocket; }); if (retVal != socketMap.end()) { printf("客户端%d已断开\n", retVal->first); closesocket(retVal->second); socketMap.erase(retVal); break; } else { printf("没有该客户端\n"); } } } return 0;} int main(){ CreateThread(0, 0, (LPTHREAD_START_ROUTINE)SendMsg, 0, 0, 0); WSADATA wsaData = { 0 }; WSAStartup(MAKEWORD(2,2),&wsaData); SOCKET serverSocket = socket(AF_INET,SOCK_STREAM,0); sockaddr_in sockaddr; sockaddr.sin_family = AF_INET; sockaddr.sin_addr.S_un.S_addr = INADDR_ANY; //监听本机任意IP地址的8888端口 //sockaddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1"); sockaddr.sin_port = htons(8888); int bindRet = bind(serverSocket, (SOCKADDR*)&sockaddr, sizeof(sockaddr)); if (bindRet == SOCKET_ERROR) { printf("绑定失败\n"); closesocket(serverSocket); WSACleanup(); getchar(); exit(0); } int listenRet = listen(serverSocket, 3); if (listenRet == -1) { printf("监听失败\n"); closesocket(serverSocket); WSACleanup(); system("pause"); return 0; } printf("监听中...\n"); while (1) { SOCKADDR_IN clientSockAddr_in = {}; int len = sizeof(clientSockAddr_in); SOCKET clientSocket = accept(serverSocket, (SOCKADDR*)&clientSockAddr_in, &len); printf("有客户端连接\n"); printf("ip=%s,port=%d\n", inet_ntoa(clientSockAddr_in.sin_addr), ntohs(clientSockAddr_in.sin_port)); socketMap[ntohs(clientSockAddr_in.sin_port)] = clientSocket; CreateThread(0, 0, (LPTHREAD_START_ROUTINE)RecvMsg, &socketMap[ntohs(clientSockAddr_in.sin_port)], 0, 0); }}
#define _WINSOCK_DEPRECATED_NO_WARNINGS #define _CRT_SECURE_NO_WARNINGS #include <WinSock2.h>#include <WS2tcpip.h>#pragma comment(lib,"ws2_32.lib")#include <stdio.h>#include <iostream> DWORD WINAPI RecvMsg(const SOCKET* clientSocket){ while (1) { char recvStr[100] = {}; int recvRet = recv(*clientSocket, recvStr, sizeof(recvStr), 0); if (recvRet != -1) printf("服务器说:%s\n", recvStr); else { printf("服务器已断开\n"); closesocket(*clientSocket); WSACleanup(); system("pause"); closesocket(*clientSocket); WSACleanup(); exit(0); } } return 0;} int main(){ WSADATA wsaData = { 0 }; WSAStartup(MAKEWORD(2, 2), &wsaData); SOCKET clientSocket = socket(AF_INET, SOCK_STREAM, 0); //******bind自定义端口号测试*********/ SOCKADDR_IN clientSockAddr_in = { 0 }; clientSockAddr_in.sin_family = AF_INET; clientSockAddr_in.sin_addr.S_un.S_addr = INADDR_ANY; //本机IP clientSockAddr_in.sin_port = htons(2222); if(bind(clientSocket, (SOCKADDR*)&clientSockAddr_in, sizeof(clientSockAddr_in)) == SOCKET_ERROR) { std::cout << "绑定套接字失败\n"; closesocket(clientSocket); WSACleanup(); system("pause"); return 0; } /***************************************/ SOCKADDR_IN sockaddr_in; sockaddr_in.sin_family = AF_INET; sockaddr_in.sin_addr.S_un.S_addr = inet_addr("172.16.20.203"); //inet_addr("192.168.18.173"); //服务端ip地址 //sockaddr_in.sin_addr.S_un.S_addr = inet_addr("192.168.74.128"); sockaddr_in.sin_port = htons(8888); //服务端监听的端口 int conRet = connect(clientSocket,(SOCKADDR*)&sockaddr_in, sizeof(sockaddr_in)); if (conRet != SOCKET_ERROR) { printf("连接成功\n"); CreateThread(0, 0, (LPTHREAD_START_ROUTINE)RecvMsg, &clientSocket, 0, 0); } else { printf("连接失败,返回%d\n", conRet); closesocket(clientSocket); WSACleanup(); } while (1) { printf("输入内容\n"); char sendStr[10000] = {}; //scanf("%s", sendStr); //遇到空格会截断后面内容 gets_s(sendStr, sizeof(sendStr)); int ret = send(clientSocket, sendStr, strlen(sendStr), 0); if (ret != 0) printf("客户端发送数据%dbyte\n", ret); }}