C++基于TCP/IP简单的客户端、服务器通信程序实例
2017-11-02 10:09
986 查看
原文:http://blog.csdn.net/shenjie12345678/article/details/28321969
本篇文章实现了一个基于TCP 的一个非常简单的客户/服务器通信程序实例。该程序中通讯协议使用的是面向连接的TCP协议SOCK_STREAM, 服务器的ip地址为本地地址即:
127.0.0.1,端口号为自定义的5099(大于1024即可),服务端的功能只要有客户端连接请求,服务端就接受连接,在连接成功后向客户端发送数据,并且接受客户端发送的
数据。客户端在向服务端发出请求后接受并显示服务端的数据,并且给服务端也发送数据。
以下代码是服务端程序代码:
接下来是客户端代码:
运行结果:
本篇文章实现了一个基于TCP 的一个非常简单的客户/服务器通信程序实例。该程序中通讯协议使用的是面向连接的TCP协议SOCK_STREAM, 服务器的ip地址为本地地址即:
127.0.0.1,端口号为自定义的5099(大于1024即可),服务端的功能只要有客户端连接请求,服务端就接受连接,在连接成功后向客户端发送数据,并且接受客户端发送的
数据。客户端在向服务端发出请求后接受并显示服务端的数据,并且给服务端也发送数据。
以下代码是服务端程序代码:
#include <WinSock2.h> #include <stdio.h> #include <stdlib.h> #pragma comment(lib, "ws2_32.lib") void main() { WSADATA wsaData; int port = 5099; char buf[] = "Server: hello, I am a server....."; if(WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) { printf("Failed to load Winsock"); return; } //创建用于监听的套接字 SOCKET sockSrv = socket(AF_INET, SOCK_STREAM, 0); SOCKADDR_IN addrSrv; addrSrv.sin_family = AF_INET; addrSrv.sin_port = htons(port); //1024以上的端口号 addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY); int retVal = bind(sockSrv, (LPSOCKADDR)&addrSrv, sizeof(SOCKADDR_IN)); if(retVal == SOCKET_ERROR){ printf("Failed bind:%d\n", WSAGetLastError()); return; } if(listen(sockSrv,10) ==SOCKET_ERROR){ printf("Listen failed:%d", WSAGetLastError()); return; } SOCKADDR_IN addrClient; int len = sizeof(SOCKADDR); while(1) { //等待客户请求到来 SOCKET sockConn = accept(sockSrv, (SOCKADDR *) &addrClient, &len); if(sockConn == SOCKET_ERROR){ printf("Accept failed:%d", WSAGetLastError()); break; } printf("Accept client IP:[%s]\n", inet_ntoa(addrClient.sin_addr)); //发送数据 int iSend = send(sockConn, buf, sizeof(buf) , 0); if(iSend == SOCKET_ERROR){ printf("send failed"); break; } char recvBuf[100]; memset(recvBuf, 0, sizeof(recvBuf)); // //接收数据 recv(sockConn, recvBuf, sizeof(recvBuf), 0); printf("%s\n", recvBuf); closesocket(sockConn); } closesocket(sockSrv); WSACleanup(); system("pause"); }
接下来是客户端代码:
#include <WinSock2.h> #include <stdio.h> #pragma comment(lib, "ws2_32.lib") void main() { //加载套接字 WSADATA wsaData; char buff[1024]; memset(buff, 0, sizeof(buff)); if(WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) { printf("Failed to load Winsock"); return; } SOCKADDR_IN addrSrv; addrSrv.sin_family = AF_INET; addrSrv.sin_port = htons(5099); addrSrv.sin_addr.S_un.S_addr = inet_addr("127.0.0.1"); //创建套接字 SOCKET sockClient = socket(AF_INET, SOCK_STREAM, 0); if(SOCKET_ERROR == sockClient){ printf("Socket() error:%d", WSAGetLastError()); return; } //向服务器发出连接请求 if(connect(sockClient, (struct sockaddr*)&addrSrv, sizeof(addrSrv)) == INVALID_SOCKET){ printf("Connect failed:%d", WSAGetLastError()); return; }else { //接收数据 recv(sockClient, buff, sizeof(buff), 0); printf("%s\n", buff); } //发送数据 char buff = "hello, this is a Client...."; send(sockClient, buff, sizeof(buff), 0); //关闭套接字 closesocket(sockClient); WSACleanup(); }
运行结果:
相关文章推荐
- C++基于TCP/IP简单的客户端、服务器通信程序实例
- C++基于TCP/IP简单的客户端、服务器通信程序实例
- C++基于TCP/IP简单的客户端、服务器通信程序实例
- C++基于TCP/IP简单的客户端、服务器通信程序实例
- C++基于TCP/IP简单的客户端、服务器通信程序实例
- C++基于TCP/IP简单的客户端、服务器通信程序实例
- C++基于TCP/IP简单的客户端、服务器通信程序实例
- C++基于TCP/IP简单的客户端、服务器通信程序实例
- C++基于TCP/IP简单的客户端、服务器通信程序实例
- C++基于TCP/IP简单的客户端、服务器通信程序实例
- Linux基于TCP/IP简单的客户端、服务器通信程序实例
- Linux基于TCP/IP简单的客户端、服务器通信程序实例
- 一个简单的基于node.js的TCP服务器和基于C++的TCP客户端通信示例程序
- 基于TCP网络通信的自动升级程序源码分析-客户端连接服务器
- TCP/IP通信 客户端、服务器 实例
- 基于TCP网络通信的自动升级程序源码分析-客户端连接服务器
- 基于TCP通信的简单服务端和客户端程序
- 如何使用TCP/IP与服务器进行通信-一个简单的聊天程序
- TCP/IP通信 客户端、服务器 实例
- 基于TCP网络通信的自动升级程序源码分析-客户端请求服务器上的升级信息