C++网络通信实例(TCP/IP协议,包括服务端与客户端通信)

这篇具有很好参考价值的文章主要介绍了C++网络通信实例(TCP/IP协议,包括服务端与客户端通信)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

创作不易 觉得有帮助请点赞关注收藏

TCP/IP是当下网络协议栈中的主流协议 TCP属于传输层的协议  可靠传输 包括经典的三次握手等等

IP协议是网络层协议 尽全力传输但不可靠 学过计算机网络的同学们对这个应该比较熟悉

以下是使用C++进行网络通信的实例 

服务端

主要使用多线程技术建立连接 也就是一个服务端可以连接多个客户端 最大连接数可以限定

向客户端发送字符串this is server 并启动一个线程等待客户端发送信息过来

如果客户端发送A过来 服务器返回B 发送C过来 服务器返回D 发送exit之后服务器关闭线程

效果图如下c++tcp,C++,tcp/ip,网络,c++

 c++tcp,C++,tcp/ip,网络,c++

代码如下

#include<iostream>
#include<stdlib.h>
#include<WinSock2.h>
#define _WINSOCK_DEPRECATED_NO_WARNINGS

using namespace std;
#pragma comment(lib, "ws2_32.lib")
DWORD WINAPI threadpro(LPVOID pParam) {
	SOCKET hsock = (SOCKET)pParam;
	char buffer[1024];
	char sendBuffer[1024];
	if (hsock != INVALID_SOCKET)

		cout << "start receive" << endl;
	while (1)
	{
		int num = recv(hsock, buffer, 1024, 0);
		if (num >= 0)
			cout << "receive from clinet" << buffer << endl;
		if (!strcmp(buffer, "A"))
		{
			memset(sendBuffer, 0, 1024);
			strcpy_s(sendBuffer, "B");
			int ires = send(hsock, sendBuffer, sizeof(sendBuffer), 0);//回送信息
			cout << "send to client" << sendBuffer << endl;


		}
		else if (!strcmp(buffer, "C"))
		{
			memset(sendBuffer, 0, 1024);
			strcpy_s(sendBuffer, "D");
			int ires = send(hsock, sendBuffer, sizeof(sendBuffer), 0);//回送信息
			cout << "send to client" << sendBuffer << endl;

		}
		else if (!strcmp(buffer, "exit"))
		{

			cout << "client close" << endl;
			cout << "server process close" << endl;
			return 0;
		}
		else
		{
			memset(sendBuffer, 0, 1024);
			strcpy_s(sendBuffer, "ERR");
			int ires = send(hsock, sendBuffer, sizeof(sendBuffer), 0);//回送信息
			cout << "send to client" << sendBuffer << endl;


		}
		 
	}
	return 0;


}
void main() {
	WSADATA wsd;
	WSAStartup(MAKEWORD(2, 2), &wsd);
	SOCKET m_SockServer;
	sockaddr_in serveraddr;
	sockaddr_in serveraddrfrom;
	SOCKET m_Server[20];
	serveraddr.sin_family = AF_INET;
	serveraddr.sin_port = htons(4600);//端口号
	//serveraddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
	m_SockServer = socket(AF_INET, SOCK_STREAM, 0);
	int i = bind(m_SockServer, (sockaddr*)&serveraddr, sizeof(serveraddr));//绑定数
	cout << "bind:" << i << endl;
	int imaxconnect = 20;
	int iconnect = 0;
	int ilisret;
	char buf[] = "this is server\0";
	char WarnBuf[] = "it is over max connect\0";
	int len = sizeof(sockaddr);
	while (1) {
		ilisret = listen(m_SockServer, 0);
		m_Server[iconnect] = accept(m_SockServer, (sockaddr*)&serveraddrfrom, &len);
		if (m_Server[iconnect] != INVALID_SOCKET)
		{
			int ires = send(m_Server[iconnect], buf, sizeof(buf), 0);
			cout << "accept:" << ires << endl;
			iconnect++;
			if (iconnect > imaxconnect)
			{
				int ires = send(m_Server[iconnect], WarnBuf, sizeof(WarnBuf), 0);

			}
			else
			{
				HANDLE m_handle;
				DWORD nThreadld = 0;
				m_handle = (HANDLE)::CreateThread(NULL, 0, threadpro, (LPVOID)m_Server[--iconnect], 0, &nThreadld);//启动 线程



			}




		}


		WSACleanup();
	}

}

客户端

#include<iostream>
#include<stdlib.h>
#include"winsock2.h"
#include<time.h>
#define _WINSOCK_DEPRECATED_NO_WARNINGS
using namespace std;
#pragma comment(lib,"ws2_32.lib")
void main() {
	WSADATA wsd;
	WSAStartup(MAKEWORD(2, 2), &wsd);
	SOCKET m_SockClient;
	sockaddr_in clientaddr;
	clientaddr.sin_family = AF_INET;
	clientaddr.sin_port = htons(4600);
	//clientaddr.sin_addr.S_un.S_addr =inet_addr("127.0.0.1");
	m_SockClient = socket(AF_INET, SOCK_STREAM, 0);
	int i = connect(m_SockClient, (sockaddr*)&clientaddr, sizeof(clientaddr));
	cout << "connect" << i << endl;
	char buffer[1024];
	char inBuf[1024];
	int num;
	num = recv(m_SockClient, buffer, 1024, 0);
	if (num > 0) {
		cout << "receive from server" << buffer << endl;
		while (1) {
			num = 0;
			cin >> inBuf;
			if (!strcmp(inBuf, "exit")) {

				send(m_SockClient, inBuf, sizeof(inBuf), 0);
				return;

			}
			send(m_SockClient, inBuf, sizeof(inBuf), 0);
			num = recv(m_SockClient, buffer, 1024, 0);
			if (num >= 0)
				cout << "reveive from server" << buffer << endl;





		}








	}








}

创作不易 觉得有帮助请点赞关注收藏文章来源地址https://www.toymoban.com/news/detail-630538.html

到了这里,关于C++网络通信实例(TCP/IP协议,包括服务端与客户端通信)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 网络编程——深入理解TCP/IP协议——OSI模型和TCP/IP模型:构建网络通信的基石

    TCP/IP协议,即 传输控制协议/互联网协议 ,是一组用于在计算机网络中实现通信的协议。它由两个主要的协议组成:TCP(传输控制协议)和IP(互联网协议)。TCP负责确保数据的可靠传输,而IP则负责路由数据包以在网络中传递。TCP/IP协议簇还包含其他辅助协议,如UDP(用户数

    2024年02月14日
    浏览(57)
  • 网络编程day2——基于TCP/IP协议的网络通信

            计算机S                                                 计算机C      创建socket对象                                   创建socket对象      准备通信地址(自己的ip(非公网ip))      准备通信地址                                     (计算

    2024年02月10日
    浏览(68)
  • SCTP, TCP, UDP, IP, ICMP都在哪一层?(TCP/IP网络通信协议学习)

    TCP/IP网络通信协议最早是由 罗伯特·卡恩 (Robert E. Kahn)和 文顿·瑟夫 (Vinton G. Cerf)于1972年提出的,它是一个实际的协议栈。 OSI七层网络通信协议最早是 由国际标准化组织 (ISO)于1977年提出的,它是一个理论模型。TCP/IP网络通信协议由于其简单性和实用性,成为 事实上

    2024年01月22日
    浏览(74)
  • socket套接字通信 TCP传输控制协议/IP网络协议 5.18

    B/S :浏览器和服务器 C/S :客户机和服务器 网络的层次结构和每层所使用协议的集合 网络采用分层管理的方法,将网络的功能划分为不同的模块 OSI模型: 共7种: 数据的封装与传递过程: 网络传输数据大小user data: 6~1460 网络传输中容易发生拆包和粘包,所以接收和发送的字节

    2024年02月05日
    浏览(78)
  • 【netty系列-01】深入理解网络通信基本原理和tcp/ip协议

    Netty系列整体栏目 内容 链接地址 【一】深入理解网络通信基本原理和tcp/ip协议 https://zhenghuisheng.blog.csdn.net/article/details/136359640 【二】深入理解Socket本质和BIO https://zhenghuisheng.blog.csdn.net/article/details/136549478 在最初的网络中,是借鉴于这个OSI七层网络模型,而在实际开发应用中

    2024年03月17日
    浏览(62)
  • Java网络编程之IP,端口号,通信协议(UDP,TCP)

    ① C/S :客户端/服务器 在用户本地需要下载安装客户端程序,在远程有一个服务器端程序。 优点:画面精美,用户体验好 缺点:用户需要下载更新 ② B/S :浏览器/服务器 只需要一个浏览器,用户通过指定网址访问对应的服务器。 优点:不需要开发客户端,只需要页面+服务

    2024年02月03日
    浏览(84)
  • 【网络通信】探索UDP与TCP协议、IP地址和端口号的奥妙

    🌺 个人主页: Dawn黎明开始 🎀 系列专栏: 网络奇幻之旅 ⭐ 每日一句:往前走,朝着光 📢 欢迎大家:关注 🔍 +点赞 👍 +评论📝+收藏⭐️ 文章目录 📋前言 一.网络通信 1.1网络通信协议 1.2TCP/IP协议中的四个层次 二.UDP协议 2.1定义 2.2UDP连接的交互过程 三.TCP协议 3.1定义

    2024年02月05日
    浏览(49)
  • Linux网络编程——C++实现进程间TCP/IP通信

    地址接口 1、通用地址接口 共16字节 = 2字节地址类型 + 14字节地址数据 2、自定义地址接口 地址转换 1、需要将点分字符串ip转化为程序ip,使用inet_addr函数: 2、字节序转换 地址接口配置中的端口需要字节序转换,网络规定使用大端字节序。 地址接口配置 1、socket:创建套接

    2024年02月20日
    浏览(57)
  • 【Java】--网络编程:基于TCP协议的网络通信

    TCP协议(Transmission Control Protocol),即传输控制协议,是一种 面向连接 的, 可靠 的,基于 字节流 的传输层通信协议。数据大小无限制。 建立连接的过程需要 三次握手 。 断开连接的过程需要 四次挥手 。 使用TCP协议的通信双方分别为 客户端 和 服务器端 。 客户端负责向服务

    2024年01月23日
    浏览(61)
  • 网络通信(11)-C#TCP服务端封装帮助类实例

    本文使用Socket在C#语言环境下完成TCP服务端封装帮助类的实例。 实例完成的功能: 服务器能够连接多个客户端显示在列表中,实现实时刷新。 服务器接收客户端的字符串数据。 选中列表中的客户端发送字符串数据。 在VS中创建C# Winform项目,编辑界面,如下: UI文件

    2024年02月02日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包