首页 > 其他分享 >网络通信

网络通信

时间:2024-06-08 10:12:54浏览次数:20  
标签:网络通信 __ cout mysocket send include buf

服务端

//服务端(以C++作范例)
#include"mysocket.h"
//导入头文件:由于mysock头文件本身就有其它文件,这里无需导入 	
using namespace std;
 
SOCKET s_accept;
 
int main()
{
	cout << "---------------------------服务端---------------------------\n";
	cout << "正在启动...\n";
	startup();
	cout << "启动成功!\n";
	SOCKET s = createSocket(PF_INET, SOCK_STREAM);
	//以IPV6协议创建套接字 
	//填充信息 
	SOCKADDR_IN server_addr;
	server_addr.sin_family = AF_INET;//协议 
	server_addr.sin_port = htons(8226);//端口,随便填 
	server_addr.sin_addr.S_un.S_addr = inet_addr("192.168.1.49"); 
	//ip地址,这里填服务端设备上的ip,127.0.0.1是本地ip,不能实现跨设备交互 
	if (bind(s, (SOCKADDR*)&server_addr, sizeof(SOCKADDR)) == SOCKET_ERROR)
	//绑定套接字 
	{
		cout << "套接字绑定失败!\n";
		WSACleanup();
		return FALSE;
	}
	cout << "套接字绑定成功!" << endl;
	if (listen(s, 1) == SOCKET_ERROR)
	{
		//监听:将服务端转为被动状态,接收请求 
		cout << "监听失败!\n";
		WSACleanup();
		return FALSE;
	}
	cout << "设置监听状态成功!\n";
	sockaddr_in accept_addr;         //用来记录请求连接的套接字信息
	int len = sizeof(SOCKADDR);
	cout << "等待客户端发起请求..." << endl;
	SOCKET t = accept(s, (SOCKADDR*)&accept_addr, &len);
	//接受连接请求 
	if (s_accept == SOCKET_ERROR) {
		cout << "请求错误!\n";
		WSACleanup();
		return FALSE;
	}
	cout << "建立连接成功!\n";
	char recv_buf[1145], send_buf[4514];
	while(1){
		//信息交互部分,可以作改动 
		myrecv(t, recv_buf);
		cout << "接收到客户端信息:" << recv_buf << endl;
//		cout << "请输入要发送的信息:";
//		cin >> send_buf;
//		mysend(t, send_buf);
	}
    return 0;
}

客户端

//客户端 
#include"mysocket.h"
//头文件 
using namespace std;
 
int main()
{
	cout << "-----------------客户端----------------\n";
	startup();				//启动 
	//检测版本号
	if (LOBYTE(wsdata.wVersion) != 2 || HIBYTE(wsdata.wHighVersion) != 2) {
		cout << "版本号与服务端不匹配!" << endl;
		WSACleanup();
		return FALSE;
	}
	//填充服务端信息:这里填和服务端一样的就好,不做解释 
	SOCKET client = createSocket(PF_INET, SOCK_STREAM);
	SOCKADDR_IN server_addr;
	server_addr.sin_family = AF_INET;
	server_addr.sin_addr.S_un.S_addr = inet_addr("192.168.1.48");
	server_addr.sin_port = htons(8226);
	//发送连接请求 请求连接服务器
	if (connect(client, (SOCKADDR*)&server_addr, sizeof(SOCKADDR)) == SOCKET_ERROR) {
		cout << "连接错误!" << endl;
		WSACleanup();
		return -1;
	}
	cout << "成功连接到服务器" << endl;
	char send_buf[1145], recv_buf[4514];
	while(1){
		cout << "输入要发送的信息:";
		cin >> send_buf;
		mysend(client,send_buf);
		i++;
		cout << "等待服务端响应...\n";
		myrecv(client, recv_buf);
		cout << "收到来自服务端的信息:" << recv_buf << endl;
	}
	return 0;
}

mysocket文件

//mysocket.h
#ifndef __MYSOCKET_H__
#define __MYSOCKET_H__
//头文件保护 
#include<bits/stdc++.h>
#include<winsock.h>
#pragma comment(lib,"ws2_32.lib")
 
using namespace std;
 
WSADATA wsdata;
 
void startup(){
	//异步启动 
	if (WSAStartup(MAKEWORD(2, 2), &wsdata))
	/*	               ^                ^ 
			    版本号,这里用的是2.2   |
			    			数据存放处,这里设成全局变量 
	*/ 
	{
		//返回0则成功,否则失败,报错 
		cout << "启动失败!\n";
		WSACleanup();
		exit(0);
	}
}
 
SOCKET createSocket(int af, int type){
	/*原函数原型: 
	  SOCKET socket(int af, int type, int protocol)
	  				    ^       ^           ^
	  			      协议  类型(后文) 形式(一般用0) 
	*/
	SOCKET ret = socket(af, type, 0);
	if (ret == INVALID_SOCKET)  //错误返回INVALID_SOCKET 
	{
		//报错 
		cout << "创建套接字失败!\n";
		WSACleanup();
		exit(0);
	}
	return ret;
}
 
void mysend(SOCKET s, const char* buf){
	/*
		带报错的send()函数,原函数原型为 :
		int send(SOCKET s, const char* buf, int len, int flag) 
		这里为了简化,省略后两个参数。 
		函数把buf发送给s,返回发送长度 
	*/ 
	int len = send(s, buf, sizeof(buf), 0);
	if(len < 0)		//发送错误 
	{
		cout << "信息发送失败!\n";
		WSACleanup();
		exit(0);
	}
}
 
void myrecv(SOCKET s, char* buf){
	/*
		带报错的recv()函数,其原型为: 
		int recv(SOCKET s, char* buf, int len, int flag)
		同样省略后两个参数 
		函数将从s收到的信息储存在buf中,返回接收长度 
	*/
	int len = recv(s, buf, sizeof(buf), 0);
	if(len < 0)
	{
		cout << "信息接收失败!\n";
		WSACleanup();
		exit(0);
	}
}
 
#endif
//别忘了 

标签:网络通信,__,cout,mysocket,send,include,buf
From: https://www.cnblogs.com/wangyueshuo/p/18238344

相关文章

  • TCP协议网络通信
    TCP协议网络通信目录TCP协议网络通信头文件/宏定义客户端服务器验证结果客户端服务器头文件/宏定义#include<stdio.h>#include<stdlib.h>#include<string.h>#include<arpa/inet.h>#include<netinet/in.h>#include<sys/types.h>#include<sys/socket.h>#includ......
  • SNCScan:针对SAP安全网络通信(SNC)的安全分析与评估工具
    关于SNCScanSNCScan是一款针对SAP安全网络通信(SNC)的安全分析与评估工具,该工具旨在帮助广大研究人员分析SAP安全网络通信(SNC),并分析和检测SNC配置与SAP组件中的潜在问题。SNC系统参数SNC基础SAP协议,例如DIAG或RFC,本身并没有提供较高的安全保护。为了提高安全性并确保身份验......
  • 网络通信SCI期刊,中科院2区,IF=7.9,国产期刊,影响力高,口碑佳
    一、期刊名称Digital Communications andNetworks二、期刊简介概况期刊类型:SCI学科领域:网络通信影响因子:7.9中科院分区:2区出版方式:开放出版三、期刊征稿范围《数字通信与网络》与科爱出版社和重庆邮电大学合作出版季刊,该期刊发表严格的同行评审和高质量的原创......
  • 【网络通信】初探Google的reCAPTCHA安全认证技术
        在数字化日益普及的今天,如何有效保护网站免受恶意攻击和滥用成为了每个网站管理员和开发者必须面对的重要问题。而reCAPTCHA正是Google提供的一种强大且智能的解决方案,旨在通过人机验证来增强网站的安全性。一、reCAPTCHA简介        reCAPTCHA是Google推......
  • 【QT】TCP网络通信
    第一步:.pro工程文件添加QT+=network第二步:.h文件添加#ifndefTCPSERVER_H#defineTCPSERVER_H#include<QException>#include<QDebug>#include<QTcpServer>#include<QTcpSocket>classTcpServer:publicQObject{Q_OBJECTpublic:T......
  • 车载网络通信及诊断测试
    车载网络通信,作为现代汽车技术的核心组成部分,其定义与重要性不容忽视。简而言之,车载网络通信是指汽车内部各个电子控制单元(ECU)之间,以及汽车与外部设备之间,通过特定的通信协议进行数据交换和信息共享的过程。这一过程对于实现汽车的智能化、网联化以及电动化至关重要。 诊断测试......
  • 网络封包分析软件主要用于捕获、分析网络通信中的数据包,对于网络故障排除、安全审计、
    网络封包分析软件主要用于捕获、分析网络通信中的数据包,对于网络故障排除、安全审计、协议分析等领域至关重要。以下是几款知名的网络封包分析软件:Wireshark:Wireshark是最为流行的网络封包分析工具之一,它具有强大的数据包捕获和分析能力,支持广泛的协议,提供详细的封包解码......
  • 网络架构和网络通信
    【一】常见的网络架构模式【1】CS模型C是英文单词“Client”的首字母,即客户端的意思C/S就是“Client/Server”的缩写,即“客户端/服务器”模式。例如:拼多多APP、PC上的有道云笔记等等【2】BS模型B是英文单词“Browser”的首字母,即浏览器的意思;S是英文单词“Server”......
  • 网络通信
    2.0】操作系统与网络通信【零】引入【1】什么是网络编程网络编程是指通过编程语言在计算机之间建立通信的一种方式。它是在互联网上进行数据传输的关键组成部分,使计算机能够相互通信、交换信息和共享资源。网络编程涉及许多不同的技术和协议,包括TCP/IP(传输控制协议/因特网协......
  • [19] C++网络通信开发
    Day1 通过引入路径找到类型根据角色进入方向开门(向量运算、几何概念、点乘)向量的减法:OtherActor->GetActorLocation()-GetActorLocation()这一部分是计算两个位置向量之间的差向量,即门的位置向量减去角色的位置向量,得到了一个从门指向角色的向量。向量的归一化:V1......