TCP Server《——》TCP Client

简介: #include #include #pragma comment(lib, "WS2_32") // 链接到WS2_32.lib class CInitSock { public: CInitSock(BYTE minorVer = 2, BYTE majorVer = 2) { // 初始化WS2_32.

#include <stdio.h> #include <winsock2.h> #pragma comment(lib, "WS2_32") // 链接到WS2_32.lib class CInitSock { public: CInitSock(BYTE minorVer = 2, BYTE majorVer = 2) { // 初始化WS2_32.dll WSADATA wsaData; WORD sockVersion = MAKEWORD(minorVer, majorVer); if(::WSAStartup(sockVersion, &wsaData) != 0) { exit(0); } } ~CInitSock() { ::WSACleanup(); } }; CInitSock initSock; // 初始化Winsock库 int main1(); int main2(); void main() { printf("Please select a item:/n"); printf("s:Server/n"); printf("c:Client/n"); char a; while(1){ scanf("%c",&a); if(a=='s'){main1();break;} else if(a=='c'){main2();break;} else continue; } } ///服务器端绑定监听时,每接收一个新链接时,都会接收客户端来的数据;向客户端发送数据 ///客户端连接上服务器后,就向服务器端发送数据;接收一次从服务器发来的数据 //Server int main1() { // 创建套节字 SOCKET sListen = ::socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if(sListen == INVALID_SOCKET) { printf("Failed socket() /n"); return 0; } // 填充sockaddr_in结构 sockaddr_in sin; sin.sin_family = AF_INET; sin.sin_port = htons(4567); sin.sin_addr.S_un.S_addr = INADDR_ANY; // 绑定这个套节字到一个本地地址 if(::bind(sListen, (LPSOCKADDR)&sin, sizeof(sin)) == SOCKET_ERROR) { printf("Failed bind() /n"); return 0; } // 进入监听模式 if(::listen(sListen, 2) == SOCKET_ERROR) { printf("Failed listen() /n"); return 0; } // 循环接受客户的连接请求 sockaddr_in remoteAddr; int nAddrLen = sizeof(remoteAddr); SOCKET sClient; while(TRUE) { // 接受一个新连接 sClient = ::accept(sListen, (SOCKADDR*)&remoteAddr, &nAddrLen); if(sClient == INVALID_SOCKET) { printf("Failed accept()"); continue; } printf(" 接受到一个连接:%s /r/n", inet_ntoa(remoteAddr.sin_addr)); // 接收客户端来的数据 char buff[256]; int nRecv = ::recv(sClient, buff, 256, 0); if(nRecv > 0) { buff[nRecv] = '/0'; printf(" 接收到数据:%s", buff); } //发送数据 char szText[] = "data from TCP Server to TCP Client success! /r/n"; // 向客户端端发送数据 ::send(sClient, szText, strlen(szText), 0); // 关闭同客户端的连接 ::closesocket(sClient); } // 关闭监听套节字 ::closesocket(sListen); return 0; } //Client int main2() { // 创建套节字 SOCKET s = ::socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if(s == INVALID_SOCKET) { printf(" Failed socket() /n"); return 0; } // 也可以在这里调用bind函数绑定一个本地地址 // 否则系统将会自动安排 // 填写远程地址信息 sockaddr_in servAddr; servAddr.sin_family = AF_INET; servAddr.sin_port = htons(4567); // 注意,这里要填写服务器程序(TCPServer程序)所在机器的IP地址 // 如果你的计算机没有联网,直接使用127.0.0.1即可 servAddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1"); if(::connect(s, (sockaddr*)&servAddr, sizeof(servAddr)) == -1) { printf(" Failed connect() /n"); return 0; } char szText[] = "data from TCP Client to TCP Server success! /r/n"; // 向服务器端发送数据 ::send(s, szText, strlen(szText), 0); // 接收服务器来的数据 char buff[256]; int nRecv = ::recv(s, buff, 256, 0); if(nRecv > 0) { buff[nRecv] = '/0'; printf(" 接收到数据:%s", buff); } // 关闭套节字 ::closesocket(s); return 0; }

目录
相关文章
|
4月前
|
网络协议 关系型数据库 MySQL
启动mysql时的异常为:[ERROR] Can‘t start server: Bind on TCP/IP port. Got error: 98: Address already in used
启动mysql时的异常为:[ERROR] Can‘t start server: Bind on TCP/IP port. Got error: 98: Address already in used
|
网络协议
TCP client
TCP client
89 0
|
网络协议
TCP server
TCP server
99 0
|
网络协议 Linux 测试技术
我个人的Linux TCP server和client测试源码,C语言(2)(★firecat推荐★)
我个人的Linux TCP server和client测试源码,C语言(2)(★firecat推荐★)
339 0
我个人的Linux TCP server和client测试源码,C语言(2)(★firecat推荐★)
|
网络协议 Linux C语言
我个人的Linux TCP server和client测试源码,C语言(2)(★firecat推荐★)
我个人的Linux TCP server和client测试源码,C语言(2)(★firecat推荐★)
175 0
|
负载均衡 网络协议 Linux
我个人的Linux TCP server和client测试源码,C语言(3)(★firecat推荐★)
我个人的Linux TCP server和client测试源码,C语言(3)(★firecat推荐★)
293 0
|
网络协议 NoSQL Linux
我个人的Linux TCP server和client测试源码,C语言(1)(★firecat推荐★)
我个人的Linux TCP server和client测试源码,C语言(1)(★firecat推荐★)
241 0
|
网络协议
ETCD Client 的生命周期影响系统TCP连接资源
最近发现一个 ETCD Client 端的实现问题——ETCD 所在机器宕机或者断网的情况下,ETCD Client 无法快速重连到可用的 etcd 节点,导致 client 端不可用(该问题的描述后续发表文章介绍)。
7823 0
|
网络协议 关系型数据库 Linux
PostgreSQL pgsocket: Extension for Simple TCP/IP Socket Client
标签 PostgreSQL , pgsocket 背景 PostgreSQL 插件,向外部tpc/ip socket服务发生字节流。 pgsocket is an extension for PostgreSQL server to send bytes to remote TCP/IP socket server.
859 0
|
移动开发 网络协议 开发工具
[网络篇]ESP8266-SDK教程(三)之TCP通信Server<->Client
纳尼?昨天刚刚打印了个“Hello World!”,今天你就让我学习TCP通信?有没有搞错~哈哈,相信很多读者会很迷,其实学习这东西嘛,单单学一些比较简单的,相信没两天就没人看了,所以咱就在基础篇和网络篇穿插着去学习一下ESP8266,毕竟兴趣才是最好的老师嘛!大家以后遇到问题了,来翻文章建议大家根...
2095 0