Vs2013搭建socket服务器/客户端,开线程thread
来源:互联网 发布:中央数据交换平台 编辑:程序博客网 时间:2024/05/21 11:03
话不多说,先传代码
服务器:
#include <Winsock2.h>#include <stdio.h>#include <windows.h> #include <iostream>#include <thread>//using namespace std;#pragma comment(lib,"ws2_32.lib")void main(){ void foo(SOCKET sClient); WORD wVersionRequested; WSADATA wsaData; int err; wVer`sionRequested = MA`KEWORD(1, 1); err = WSAStartup(wVersionRequested, &wsaData); if (err != 0) { return; } if (LOBYTE(wsaData.wVersion) != 1 || HIBYTE(wsaData.wVersion) != 1) { WSACleanup(); return; } SOCKET sockSrv = socket(AF_INET, SOCK_STREAM, 0); SOCKADDR_IN addrSrv; addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY); addrSrv.sin_family = AF_INET; addrSrv.sin_port = htons(6000); bind(sockSrv, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR)); listen(sockSrv, 5); SOCKADDR_IN addrClient; int len = sizeof(SOCKADDR); char revData[255]; char sendToData[255]; printf("等待连接...\n"); SOCKET sClient = accept(sockSrv, (SOCKADDR *)&addrClient, &len); printf("接受到一个连接:%s \r\n", inet_ntoa(addrClient.sin_addr)); std::thread t1(foo, sClient); t1.detach(); while (1) { //发送数据 memset(sendToData, 0, sizeof(sendToData)); std::cin >> sendToData; send(sClient, sendToData, strlen(sendToData), 0); } closesocket(sClient);}void foo(SOCKET sClient){ char revData[255]; while (1) { //接收数据 int ret = recv(sClient, revData, 255, 0); if (ret > 0) { revData[ret] = 0x00; printf("接收消息:%s\n", revData); } }}
客户端
#include <Winsock2.h>#include <stdio.h>#include <iostream>#include <thread>//using namespace std;#pragma comment(lib,"ws2_32.lib") void main(int argc, char* argv[]){ void foo(SOCKET sclient); WORD sockVersion = MAKEWORD(2, 2); WSADATA data; if (WSAStartup(sockVersion, &data) != 0) { return; } SOCKET sclient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (sclient == INVALID_SOCKET) { printf("invalid socket !"); return; } sockaddr_in serAddr; serAddr.sin_family = AF_INET; serAddr.sin_port = htons(6000); serAddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1"); //请求服务器的地址 connect(sclient, (sockaddr *)&serAddr, sizeof(serAddr)); char recData[255]; char sendToData[255]; char* sendData = "你好,TCP服务端,我是客户端!\n"; send(sclient, sendData, strlen(sendData), 0); std::thread t1(foo, sclient); t1.detach(); while (1) { //发送数据 memset(sendToData, 0, sizeof(sendToData)); std::cin >> sendToData; send(sclient, sendToData, strlen(sendToData), 0); } closesocket(sclient); WSACleanup(); return;}void foo(SOCKET sclient){ char recData[255]; //接收消息 while (1) { int ret = recv(sclient, recData, 255, 0); if (ret > 0) { recData[ret] = 0x00; printf("接收:%s\n", recData); } }}
遇到的最主要的问题就是c++11中的thread会影响到socket,形成非阻塞,这个需要去掉std;这样就能完美解决。
亲测可用,本人也是新手,以后想到什么写什么吧。
0 0
- Vs2013搭建socket服务器/客户端,开线程thread
- java socket/serversocket/thread 服务器客户端任意聊天
- c++Socket客户端 (vs2013)
- 利用socket搭建一个多客户端/服务器的框架
- socket 服务器和客户端
- iOS Socket 服务器/客户端
- 简单socket服务器客户端
- socket服务器、客户端传输
- Socket客户端服务器连接
- 新开线程
- Python 开线程
- NSOperation如何开线程
- SVN 服务器+客户端搭建
- openvpn 服务器客户端搭建
- java服务端与客户端交互(二)服务多个客户--多开线程
- 异步Socket服务器及客户端
- SOCKET 服务器和客户端通信
- Linux socket编程 服务器 客户端
- [高德地图 应用找不到本地方法nativeNewInstance] 代码正常,啥都没做就报错,地图当然也不能显示
- Intellij idea破解办法
- 正则表达式基本语法
- 关于欧拉函数和费马小定理的应用
- 【idea】基于jmeter的性能测试自动化平台开发
- Vs2013搭建socket服务器/客户端,开线程thread
- SlidingMenu_RelativeLayout_CustomViewAbove
- structs2-StrutsPrepareAndExecuteFilter类的理解
- xgboost入门与实战(原理篇)
- 关于js文本输入框输入数字进行比较的经验
- 架构以及我理解中架构的本质
- 浅谈UE4项目打包中遇到的几个问题
- SpringMVC------从HelloWorld开始
- IMWeb训练营作业--todolist