C/S架构,服务端和客户端的连接,没有用类封装,C语言风格的C++代码,编译环境VS2022

新建一个文件,然后如图,新建一个C++空项目

下一步是找到该vs文件保存的路径,新建一个tcpSocket文件夹,在tcpSocket文件夹里面新建一个tcpSocket.h和tcpSocket.cpp文件

然后回到VS,分别在两个解决方案这里添加现有项,选择刚创建的两个文件,顺手添加两个源文件

然后在Client.cpp和Server.cpp里面添加头文件

#include "../tcpSocket/tcpSocket.h"

接下来就是编写tcpSocket.h文件了

#pragma once
#ifndef _TCPSOCKET_H_
#define _TCPSOCKET_H_
#include <iostream>
#include <stdio.h>
//网络编程,要引用这两个
#include <winsock2.h>
#pragma comment(lib, "ws2_32.lib")
//后续的连接端口,0~65535,但是在定义时建议使用10000以上的端口,因为存在端口保留和占用的情况
#define PORT 65533
//定义一个err函数,方便后续debug时根据最后的错误获取信息
#define err(errMsg) printf("[line: %d]%s failed code %d\n", __LINE__, errMsg, WSAGetLastError())//该函数用来获取WSA最后发生错误的代码using namespace std;//打开网络库
bool init_Socket();
//关闭网络库
bool close_Socket();
//创建服务端socket
SOCKET CreatServerScoket();
//创建客户端socket
SOCKET CreatClientScoket(const char* ip);#endif // !_TCPSOCKET_H

然后是tcpSocket.cpp文件

#include "tcpSocket.h"bool init_Socket()
{WSADATA data;if (WSAStartup(MAKEWORD(2, 2), &data) != 0)//Windows socket async :Windows异步套接字,使用前必须要对其进行初始化{err("WSAStartup");return false;}return true;
}bool close_Socket()
{if (WSACleanup() != 0)//使用完了要关闭网络库{err("WSACleanup");return false;}return true;
}SOCKET CreatServerScoket()
{//1、创建空的socket/*parm1:AF 地址协议族 IPv4, IPv6parm2:type 地址协议类型 流式套接字, 数据报parm3:protocol 使用具体的某个传输协议*/SOCKET fd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);if (fd == INVALID_SOCKET){err("SOCKET");}//2、绑定ip地址和端口号struct sockaddr_in addr;addr.sin_family = AF_INET;//和创建时要一样addr.sin_port = htons(PORT);    //把主机字节顺序转换为网络字节顺序addr.sin_addr.S_un.S_addr = ADDR_ANY;//inet_addr("127.0.0.1")if (bind(fd, (struct sockaddr*)&addr, sizeof(addr)) == SOCKET_ERROR){err("bind");return false;}//3、监听电话:listen(fd, 10);return fd;
}SOCKET CreatClientScoket(const char* ip)
{//1、创建空的socket/*parm1:AF 地址协议族 IPv4, IPv6parm2:type 地址协议类型 流式套接字, 数据报parm3:protocol 使用具体的某个传输协议*/SOCKET fd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);if (fd == INVALID_SOCKET){err("SOCKET");}//2、绑定ip地址和端口号struct sockaddr_in addr;addr.sin_family = AF_INET;//和创建时要一样addr.sin_port = htons(PORT);    //把主机字节顺序转换为网络字节顺序addr.sin_addr.S_un.S_addr = inet_addr(ip);//3、与服务器建立连接if (connect(fd, (struct sockaddr*)&addr, sizeof(addr)) == INVALID_SOCKET){err("connect");return false;}return fd;
}

下一步先写Server服务端

#include "../tcpSocket/tcpSocke.h"int main()
{init_Socket();//初始化网络库SOCKET serfd = CreatServerScoket();//创建服务端socketcout << "wait client connect...\n";SOCKET clifd = accept(serfd, NULL, NULL);   //如果有客户端请求连接if (clifd == INVALID_SOCKET)//失败就输出如下错误{err("accept");}char buf[BUFSIZ * 2] = { 0 };//定义接收缓冲区并初始化if (recv(clifd, buf, BUFSIZ, 0) > 0)//接受并输出{cout << buf << endl;}memset(buf, 0, sizeof(buf));//缓冲区初始化,防止后续重复输出close_Socket();return 0;
}

下一个是客户端

#include "../tcpSocket/tcpSocket.h"int main()
{init_Socket();//创建客户端socketSOCKET fd = CreatClientScoket("127.0.0.1");//连接char str[] = "connect success";//连接成功send(fd, str, strlen(str), 0);closesocket(fd);//关闭客户端socketclose_Socket();//WSACleanup
}

这样就完成了,接下来想要输出更多内容,可以自行使用send和recv函数进行

在debug时,首先将server设置为启动项目,然后CTRL+F5运行server

接下来如图所示,运行client

对于debug时报这样的错误,有两种解决方案,第一个是复制这段错误代码,然后在引用的头文件最开始处定义宏

或者是在client属性之中,C/C++中关闭SDL检查,服务端和客户端都要关闭才行

参考:C/C++基础教程:详细讲解socket网络编程上_哔哩哔哩_bilibili

C/C++基础教程:详细讲解socket网络编程(中)_哔哩哔哩_bilibili

C/C++基础教程:详细讲解socket网络编程(下 )_哔哩哔哩_bilibili

C++ Socket网络编程相关推荐

  1. Linux C++/Java/Web/OC Socket网络编程

    一,Linux C++ Socket网络编程 1.什么是TCP/IP.UDP? TCP/IP(Transmission Control Protocol/Internet Protocol)即传输控制 ...

  2. python运维开发之socket网络编程01

    python运维开发之socket网络编程01说明:本文来自来自北京老男孩linux运维实战培训中心-运维开发课程免费视频内容,本文内容为系列内容,更多分享信息见:http://oldboy.blog ...

  3. Socket网络编程(2)--服务端实现

    中秋了,首先祝大家中秋快乐,闲着无事在家整一个socket的聊天程序,有点仿QQ界面,就是瞎折腾,不知道最后是不是能将所有功能实现. 如果你对socket不了解,请看这篇文章:http://www.c ...

  4. Linux Kernel TCP/IP Stack — Socket Layer — TCP/UDP Socket 网络编程

    目录 文章目录 目录 TCP/UDP Socket 逻辑架构 创建 Socket 绑定 Socket 请求建立 Socket 连接 监听 Socket 接受请求 关闭连接 数据的发送和接收 send ...

  5. Socket网络编程笔记

    网络.计算机网络的构成是什么? 网络: 在计算机领域中,网络是信息传输.接收.共享的虚拟平台,通过它可以把各个点.面(组织之间).体(例如公共app)的信息联系到一起,从而实现这些资源的共享. 局域网 ...

  6. 【Socket网络编程】14. perror()、errno 的使用

    经常会在socket网络编程时看到errno和perror(),他们是什么呢? 函数定义: void perror(const char *s); perror ("open_port&qu ...

  7. socket网络编程——套接字地址结构

    声明:此博客是本人根据老师课件总结的,如有抄袭行为,本人会即刻删除. 1.主机字节序列和网络字节序列 主机字节序列分为大端字节序和小端字节序,不同的主机采用的字节序列可能不同.大端字节序是指一个整数的 ...

  8. 【网络编程】之四、socket网络编程例解

    前面说了那么多,现在我们给出4个代码+详解,基于win32平台的socket编程.使用TCP 和 UDP 两种协议. OK,先来看一下TCP服务器和客户端: [cpp] view plaincopy ...

  9. MFC socket网络编程(流程示例)

    MFC socket网络编程(流程示例) 1.TCP流式套接字的编程步骤 在使用之前须链接库函数:工程->设置->Link->输入ws2_32.lib,OK! 服务器端程序: 1.加 ...

  10. Socket网络编程--小小网盘程序(5)

    http://www.cnblogs.com/wunaozai/p/3893469.html 各位好呀!这一小节应该就是这个小小网盘程序的最后一小节了,这一节将实现最后的三个功能,即列出用户在服务器中 ...

最新文章

  1. **汇总CodeIgniter(CI)的数据库操作函数
  2. java位移运算符2 转
  3. And Then There Was One POJ - 3517(变形约瑟夫环+规律)
  4. Ubuntu 15 安装Chromium浏览器并添加Flash插件Pepper Flash Player
  5. c++中vecto容器r常使用的相关函数
  6. Myeclipse10如何进行代码提示和自动补全
  7. vs2010操作office2010
  8. 【Caffe安装】caffe安装系列——史上最详细的安装步骤
  9. c++反向输出一个三位数
  10. 基于MPC5748G的以太网展板通信模块解析
  11. dw整个网站html文件怎么放一起,Dreamweaver模板如何批量做网页
  12. 微博研发实习阶段性总结及知识点整理
  13. python打印古诗_python教程:利用python基础知识取出对应诗句
  14. csdn博客使用反馈,bug
  15. TinyOS02:TinyOS2.1的安装(Windows平台)
  16. 2.配置文件 setting.py
  17. 从Internet说起
  18. 【三维手臂手指活动动态仿真】基于MATLAB+python三维手臂动态仿真
  19. 【多图】【严肃的技术帖】用UE4做黑丝材质
  20. 互联网金融协会获批成立

热门文章

  1. Numpy piecewise报错
  2. Active: inactive (dead)
  3. Netty ChannelGroup自动移除InActive的Channel实现
  4. Linux下磁盘配额设置
  5. 一篇文章让你了解大数据挖掘技术
  6. web网站的注销功能实现
  7. 数据库--循环语句:for循环
  8. 计算机网络(OSI、TCP/IP、网络协议、常见网络设备工作原理)
  9. Mac必备软件推荐:Photoshop 2022(ps2022)中文
  10. 《卓有成效的管理者》——学习心得(八)