C++实现Socket连接通信

简介: C++实现Socket连接通信

一、打开两个VS2019,创建两个控制台程序分别命名为client和servers


0a2653c851af460fa595bd959398a8f1.png


二、编写服务端servers


1、包含头文件及库文件

#include <WinSock2.h>
#pragma comment(lib,"ws2_32.lib")
#pragma warning(disable:4996)

2、初始化及反初始化代码,记下来就行,永远不变

//初始化代码,死记下来就行
       WORD wVersion = MAKEWORD(2, 2);
       WSADATA wsadata;
       if (WSAStartup(wVersion, &wsadata) != 0)
       {
              return 0;
       }
       //反初始化操作
       WSACleanup();

3、创建socket

SOCKET s= socket(AF_INET, SOCK_STREAM, 0);
       //第一个参数协议簇(AF_INET,ipv4;AF_INET6,ipv6;AF_UNIX,本机通信)
       //第二个参数类型(SOCK_STREAM,TCP流;SOCK_DGRAM,UDP数据报;SOCK_RAW,原始套接字)
       //第三个参数一般设置0,当确定套接字使用的协议簇和类型时,这个参数的值就为0      
       if (s==INVALID_SOCKET)
       {
              return 0;//创建套接字失败
       }

4、绑定端口并开启监听

sockaddr_in add;
       int len = sizeof(sockaddr_in);
       add.sin_family = AF_INET;//协议簇
       add.sin_addr.S_un.S_addr = inet_addr("0.0.0.0");//表示接受任意ip地址
       add.sin_port = htons(11111);//网络字节序是大尾方式,本地字节序是小尾方式,需要转换
       int i = bind(s, (sockaddr*)&add, len);
       listen(s, 5);//瞬间来五个用户

5、等待客户端连接

sockaddr_in caddr;
       caddr.sin_family = AF_INET;
       int caddrlen = sizeof(sockaddr_in);
     
       SOCKET sclient=accept(s,(sockaddr*)&caddr, &caddrlen);//重新产生一个socket用来通信
       if (sclient==INVALID_SOCKET)
       {
              return 0;
       }

6、发送数据并关闭连接

int ret = send(sclient, "哎呦", strlen("哎呦"), 0);
       closesocket(sclient);

三、编写客户端


1、包含头文件及库文件

#include <WinSock2.h>
#pragma comment(lib,"ws2_32.lib")
#pragma warning(disable:4996)

2、初始化及反初始化代码,记下来就行,永远不变

//初始化代码,死记下来就行
       WORD wVersion = MAKEWORD(2, 2);
       WSADATA wsadata;
       if (WSAStartup(wVersion, &wsadata) != 0)
       {
              return 0;
       }
       //反初始化操作
       WSACleanup();

3、创建socket

SOCKET s= socket(AF_INET, SOCK_STREAM, 0);
       //第一个参数协议簇(AF_INET,ipv4;AF_INET6,ipv6;AF_UNIX,本机通信)
       //第二个参数类型(SOCK_STREAM,TCP流;SOCK_DGRAM,UDP数据报;SOCK_RAW,原始套接字)
       //第三个参数一般设置0,当确定套接字使用的协议簇和类型时,这个参数的值就为0      
       if (s==INVALID_SOCKET)
       {
              return 0;//创建套接字失败
       }
sockaddr_in add;
       int len = sizeof(sockaddr_in);
       add.sin_family = AF_INET;//协议簇
       add.sin_addr.S_un.S_addr = inet_addr("192.168.1.107");//主动连接该ip地址
       add.sin_port = htons(11111);//网络字节序是大尾方式,本地字节序是小尾方式,需要转换

4、连接服务器

int i = connect(s, (sockaddr*)&add, len);
       if (SOCKET_ERROR==i)
       {
              return 0;
       }

5、接收服务器发送的数据并关闭连接

char sbuf[256] = { 0 };
       int ret = recv(s, sbuf, 256, 0);
       if (ret==0)
       {
              return 0;//连接断开
       }
       else if(ret>0)
       {
              printf(sbuf);
       }
     
       closesocket(s);

四、运行结果


0eacb84100b54626af849e6b562bf92a.png


五、小技巧


@err,hr 监视输入这个可以查看错误信息


0a2653c851af460fa595bd959398a8f1.png

目录
相关文章
|
1月前
|
数据处理 C# C++
如何使用C#和C++结构体实现Socket通信
如何使用C#和C++结构体实现Socket通信
|
15天前
|
存储 算法 Linux
【实战项目】网络编程:在Linux环境下基于opencv和socket的人脸识别系统--C++实现
【实战项目】网络编程:在Linux环境下基于opencv和socket的人脸识别系统--C++实现
39 6
|
3天前
|
存储 网络协议 关系型数据库
Python从入门到精通:2.3.2数据库操作与网络编程——学习socket编程,实现简单的TCP/UDP通信
Python从入门到精通:2.3.2数据库操作与网络编程——学习socket编程,实现简单的TCP/UDP通信
|
24天前
|
网络协议 Unix Linux
Socket通信详细介绍1
Socket通信详细介绍
30 0
|
1月前
|
存储 网络协议 Java
【TCP 连接手段】C++编程视角下的TCP:短连接与长连接深度解析
【TCP 连接手段】C++编程视角下的TCP:短连接与长连接深度解析
59 1
|
16天前
|
安全 Java 数据处理
Python网络编程基础(Socket编程)多线程/多进程服务器编程
【4月更文挑战第11天】在网络编程中,随着客户端数量的增加,服务器的处理能力成为了一个重要的考量因素。为了处理多个客户端的并发请求,我们通常需要采用多线程或多进程的方式。在本章中,我们将探讨多线程/多进程服务器编程的概念,并通过一个多线程服务器的示例来演示其实现。
|
16天前
|
程序员 开发者 Python
Python网络编程基础(Socket编程) 错误处理和异常处理的最佳实践
【4月更文挑战第11天】在网络编程中,错误处理和异常管理不仅是为了程序的健壮性,也是为了提供清晰的用户反馈以及优雅的故障恢复。在前面的章节中,我们讨论了如何使用`try-except`语句来处理网络错误。现在,我们将深入探讨错误处理和异常处理的最佳实践。
|
20天前
|
网络协议 程序员 Python
pythonTCP客户端编程创建Socket对象
【4月更文挑战第6天】本教程介绍了TCP客户端如何创建Socket对象。Socket作为网络通信的基础单元,包含协议、IP地址和端口等信息。在TCP/IP中,Socket分为流式(TCP)、数据报(UDP)和原始套接字。以Python为例,创建TCP Socket对象需调用`socket.socket(AF_INET, SOCK_STREAM)`。为确保健壮性,应使用异常处理处理可能的`socket.error`。学习本教程将帮助你掌握TCP客户端创建Socket对象的技能。
|
1月前
|
网络协议 安全 API
计算机网络之Socket编程
计算机网络之Socket编程