首页 > 编程语言 >C++实现Socket连接通信

C++实现Socket连接通信

时间:2022-12-26 21:06:55浏览次数:37  
标签:sockaddr return Socket AF SOCK C++ sin add 连接


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

C++实现Socket连接通信_开发语言

 

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

四、运行结果

C++实现Socket连接通信_#pragma_02

 

五、小技巧

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

C++实现Socket连接通信_c++_03

 

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

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

C++实现Socket连接通信_#pragma_04

 

标签:sockaddr,return,Socket,AF,SOCK,C++,sin,add,连接
From: https://blog.51cto.com/u_15288375/5970981

相关文章

  • Mysql查看连接数(连接总数、活跃数、最大并发数)
    怎么查看mysql的最大连接数showvariableslike'%max_connection%';查看最大连接数setglobalmax_connections=1000;    重新设置最大连接数怎么查看mysql的......
  • c/c++非阻塞键盘输入监听 Windows/Linux
    https://blog.csdn.net/a8821418/article/details/106492074Windows下c代码#include<conio.h>#include<windows.h>#include<iostream>usingnamespacestd;i......
  • Microsoft 365 开发:使用PnP Powershell连接SharePoint Online失败
    Blog链接:​​https://blog.51cto.com/13969817​​​今天小伙伴使用PnPPowershell连接SharePointOnline时,遇到如下错误:ADSTS65001:Theuseroradministratorhasnotco......
  • centos 6.9无法远程连接
    centos无法远程连接解决方案:1、查看防火墙是否关闭 service iptables status 可通过下面命令临时关闭防火墙,也可以永久关闭防火墙 /etc/init.d/iptablesstop ......
  • oss连接出现java.lang.IllegalArgumentException: Oss endpoint can't be empty.问题
    场景:在bootstrap.properties中编写nacos的配置,读取在nacos中定义的数据集连接ossspringboot版本为2.6.8结果就出现了以上错误原因:通过查找资料后发现,在springboot2.4......
  • Linux下TCP连接断开后不释放的解决办法
    https://blog.csdn.net/asty9000/article/details/81536441sysctl-a|grepkeepalive发现为默认的配置net.ipv4.tcp_keepalive_time=7200net.ipv4.tcp_keepalive......
  • 【C++入门】(五)字符串
    一. 字符与整数的联系——ASCII码每个常用字符都对应一个-128~127的数字,二者之间可以相互转化。注意:目前负数没有与之对应的字符常用ASCII值:'A'-'Z'是65~90......
  • 【C++】虚函数与多态
    所谓多态,简单来讲就是指,不同的子类在继承父类后分别都重写覆盖了父类的方法。例如下例中:classA{public:voidf(){cout<<"这是A中的func"<<end......
  • 【C++入门】(四)数组
    一. 一维数组1.1 数组的定义//数组的定义方式和变量类似。#include<iostream>#include<algorithm>usingnamespacestd;intmain(){inta[10],b[10];......
  • 1、C++环境与编译
    C++环境与编译章节概览我们将在本章讨论以下内容:a.什么是一个程序(抽象与实现)b.什么是程序的程序的开发环境c.什么是程序的编译d.什么是IDE、compiler、assembler、li......