首页 > 系统相关 >C++_Windows Socket 学习记录_01

C++_Windows Socket 学习记录_01

时间:2022-10-01 03:00:07浏览次数:56  
标签:01 Socket Windows hsocket char ErrorHanding include servAddr

主要实现服务器-服务器传输消息

Server.cpp
#include <stdio.h> #include <stdlib.h> #include <WinSock2.h> #include <iostream> #pragma comment(lib,"ws2_32.lib") using namespace std; #define PORT 5000 #define SendBUFSIZE 512 #define RevBUFSIZE 512 void ErrorHanding(const char* message); int main(int argc, char* argv[]) { //Init wasData WSADATA wsaData; if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) { ErrorHanding("WSAStartup() error"); return 0; } //Send buff RevBuff //接受缓冲区 发送缓冲区 char SendMes[SendBUFSIZE] = {}; char RevMes[RevBUFSIZE] = {}; //Create Socket SOCKET ServerSocK, ClientSocK; ServerSocK = socket(PF_INET, SOCK_STREAM, 0); if (ServerSocK == INVALID_SOCKET) { ErrorHanding("Create Socket Error"); return 0; } //Bind Socket //将Socket 与协议族 IP地址 端口号信息进行绑定 SOCKADDR_IN servAddr; memset(&servAddr, 0, sizeof(servAddr)); //sin_family addrs port //端口号信息 Ip地址 servAddr.sin_family = AF_INET; servAddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY); servAddr.sin_port = htons(PORT); if (bind(ServerSocK, (SOCKADDR*)&servAddr, sizeof(servAddr)) == SOCKET_ERROR) { ErrorHanding("bind error"); return 0; } //改为监听状态 if (listen(ServerSocK, 5) == SOCKET_ERROR) { ErrorHanding("Listen error"); return 0; } cout << "wait client to connect" << endl; //等待客户端进行连接 ClientSocK = accept(ServerSocK, nullptr, nullptr); if (ClientSocK == INVALID_SOCKET) { ErrorHanding("Accept error"); } while (true) { cout << "ServerSend:"; cin >> SendMes; if (send(ClientSocK, SendMes, sizeof(SendMes), 0) < 0) { //客户端退出时发送失败推出closeSocket ErrorHanding("Send Error"); break; } if (recv(ClientSocK, RevMes, RevBUFSIZE, 0) > 0) { cout<<"Recv:" << RevMes << endl; } } closesocket(ServerSocK); closesocket(ClientSocK); WSACleanup(); return 0; } void ErrorHanding(const char* message) { cout << message << endl; }

 

Client.cpp
#include <stdio.h>
#include <stdlib.h>
#include <WinSock2.h>
#include <iostream>
#pragma comment(lib,"ws2_32.lib")
void ErrorHanding(const char* message);
using namespace std;
#define PORT 5000
#define SendBUFSIZE 512
#define RevBUFSIZE 512

int main()
{
	WSADATA wsaData;
	//Init wsaData过程
	if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)
	{
		ErrorHanding("WSAStartup Error");
	}

	char Sendmessage[SendBUFSIZE] = {};
	char RevMessage[RevBUFSIZE] = {};
	SOCKET hsocket;

	//CreateSocket
	hsocket = socket(PF_INET, SOCK_STREAM, 0);
	if (hsocket == INVALID_SOCKET)
	{
		ErrorHanding("Socket error");
	}


	SOCKADDR_IN servAddr;
	memset(&servAddr,0,sizeof(servAddr));
	//指定端口号信息 IP地址
	servAddr.sin_family = AF_INET;
	servAddr.sin_port = htons(PORT);
	servAddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");// htonl(INADDR_ANY);
	
	//	
	if (connect(hsocket, (SOCKADDR*)&servAddr, sizeof(servAddr)) == SOCKET_ERROR)
	{
		ErrorHanding("Connect error");
		return 0;
	}

	int strlen=0;
	while (true)
	{
		strlen = recv(hsocket, RevMessage, BUFSIZ, 0);
		if (strlen > 0)
		{
			cout << "Recv:"<<RevMessage << endl;
		}
		memset(&RevMessage, 0, sizeof(RevMessage));
		cout<<"this Client Send:";
		cin >> Sendmessage;
		if (send(hsocket, Sendmessage, BUFSIZ, 0) < 0)
		{
			ErrorHanding("Send Error:");
			break;
		}
	}
	
	closesocket(hsocket);
	WSACleanup();
	return 0;
}

void ErrorHanding(const  char* message)
{
	cout << message << endl;
}

 

 

 

 

注:发送不能发送空格?

如何实现客户端/服务器同时发送消息?

注意cin 空格问题

标签:01,Socket,Windows,hsocket,char,ErrorHanding,include,servAddr
From: https://www.cnblogs.com/zsymdbk/p/16746620.html

相关文章

  • beego windows环境搭建(前面是lunix上go语言的环境)
    环境准备go环境搭建下载首先是下载,如果使用的是虚拟,直接到浏览器上去下载官方的golang-Lunix安装包Downloads-TheGoProgrammingLanguage(google.cn)如果点击了......
  • 9012 年了,还在抄,我应该高兴,还是高兴,还是高兴
    废话不说,某公众号的文字(注和人家没有关系,人家是转载)平时经常会阅读某些“大牌”的公众号,来增加自己的知识,早上就看到一篇文字,“一文告诉你全世界顶级的开发者都在用什么数据......
  • XD01创建扩展客户前台以及BAPI测试步骤
    前两天有人在群里问SD_CUSTOMER_MAINTAIN_ALL怎么创建客户。我在demo机上测试XD01创建客户,然后再测试使用BAPI。Demo机是ECC,S4已结不用XD01了,统一使用BP创建客户和供应商等......
  • windows下安装Electron并测试加载网址
    查看官网的教程,根本就安装不了,索性随便查了其他资料总结配置淘宝镜像npminstall-gcnpm--registry=https://registry.npm.taobao.org执行全局安装cnpminstalle......
  • socket,端口,进程问答(收集整理)
    一、一台计算机有几个端口,分别是什么?作用呢?端口可分为3大类:1)公认端口(WellKnownPorts):从0到1023,它们紧密绑定于一些服务。通常这些端口的通讯明确表明了某种服务的协议。......
  • 使用Ngrok进行内网穿透(Windows)
    前言相信很多开发者都有这样的需求,需要让外网访问你本地的服务器,方便调试本地代码,或者让别人体验到自己做的应用。那么这时,我们需要做的就是将我们本地的端口映射到一个外网......
  • 有了 HTTP 协议,为什么还需要 Websocket?
    WebSocket是一种基于TCP连接上进行全双工通信的协议,相对于HTTP这种非持久的协议来说,WebSocket是一个持久化网络通信的协议。它不仅可以实现客户端请求服务器,同时可以......
  • windows设置pm2开机服务 自启动nodejs项目
    PM2是带有内置负载平衡器的Node.js应用程序的生产过程管理器。可以利用它来简化很多Node应用管理的繁琐任务,如性能监控、自动重启、负载均衡等。安装部署1、我们一......
  • Windows下安装metasploit-framework所遇到的问题
    首先说明,msf最好还是安装在linux下,安装在windows下的话问题实在太多了。1.Metasploit-frameworkv6.2.19SetupWizardendedprematurely截图如下:   出现这个......
  • P5934 [清华集训2012]最小生成树
    简要题意给你一个\(N\)个点,\(M\)条边的无向连通带权图。给定一条边\((u,v,L)\),请问需要在原图中删除多少条边,使得将\((u,v,L)\)插入图后,它既可能在最小生成树上,又......