C++实现Socket连接通信

Posted web安全工具库

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++实现Socket连接通信相关的知识,希望对你有一定的参考价值。

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

 

二、编写服务端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);

四、运行结果

 

五、小技巧

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

 

欢迎关注公众号:编程有你

欢迎关注视频号:之乎者也吧

 

以上是关于C++实现Socket连接通信的主要内容,如果未能解决你的问题,请参考以下文章

c++ 求助socket多线程网络通信怎么实现并发

雷达 tcp ip socket c++

Linux之C++ socket通信编程

C++实现socket网络通信(windows)

linux下C++ socket网络编程——即时通信系统(含源码)

C++使用socket实现与微信小程序通信(修改)