网络通信之套接字

TCP服务端代码实现

#include<myhead.h>
#define SER_POST 6666  //服务器端口
#define SER_IP "192.168.36.172"//服务器ip
int main(int argc, const char *argv[])
{//1.创建套接字int sfd = socket(AF_INET,SOCK_STREAM,0);//参数1:通信域//参数2:类型 tcp /udp协议//参数3:表示默认使用一个协议if(sfd==-1){perror("socket error");return -1;}printf("socket success\n");//2.为套接字绑定ip号和端口号//2.1填充信息结构体struct sockaddr_in sin;sin.sin_family=AF_INET;  //通信域sin.sin_port=htons(SER_POST);//端口号sin.sin_addr.s_addr=inet_addr(SER_IP);//ip地址//2.2绑定工作if(bind(sfd,(struct sockaddr*)&sin,sizeof(sin))==-1){perror("bind error");return -1;}printf("bind success\n");//3.将套接字设置成监听状态if(listen(sfd,128)==-1){perror("lisen error");return -1;}printf("lisen success\n");//4.阻塞等待客户端的连接请求//4.1定义变量用于接收客户端信息struct sockaddr_in cin; // 用于接收地址信息socklen_t addrlen =sizeof(cin);//用于接收长度//4.2接收连接int newfd=accept(sfd,(struct sockaddr*)&cin,&addrlen);if(newfd==-1){perror("accept error");return -1;}printf("[%s:%d]:已成功连接一个客户端\n",\inet_ntoa(cin.sin_addr),ntohs(cin.sin_port));//5.数据的收发char buf[128]="";while(1){//清空容器bzero(buf,sizeof(buf));//从客户端中读取数据int res=recv(newfd,buf,sizeof(buf),0);if(res==-1){perror("recv error");return -1;}else if(res==0){printf("客户端已下线\n");close(newfd);break;}//正常收到客户端发来的消息printf("[%s:%d]:%s\n",inet_ntoa(cin.sin_addr),ntohs(cin.sin_port),buf);//对收到的消息进行一顿操作strcat(buf,"*_*");//将消息回给客户端if(send(newfd,buf,strlen(buf),0)==-1){perror("发送 error");return -1;}printf("发送成功\n");}//关闭监听close(sfd);return 0;
}

TCP客户端实现

#include<myhead.h>
#define SER_PORT 6666 //与服务器保持一致
#define SER_IP "192,168.36.172"//服务器ip
#define CLI_PORT 8888//客户端端口号
#define CLI_IP "192,168.36.172"//客户端端ipint main(int argc, const char *argv[])
{//创建套接字int cfd=socket(AF_INET,SOCK_STREAM,0);//参数1:通信域//参数2:使用tcp协议//参数3:默认指定一个协议if(cfd==-1){perror("socket error");return -1;}printf("cfd=%d\n",cfd);  //3//2.绑定ip地址和端口号//2.1填充地址信息结构体struct sockaddr_in cin;cin.sin_family=(AF_INET); //通信域cin.sin_port=htons(CLI_PORT);//端口号cin.sin_addr.s_addr=inet_addr(CLI_IP);//ip地址//绑定工作if(bind(cfd,(struct sockaddr*)&cin,sizeof(cin))==-1){perror("bind error");return -1;}printf("bind success\n");//3.连接到服务器填充服务器地址信息struct sockaddr_in sin;sin.sin_family=(AF_INET);//通信域sin.sin_port=htons(SER_PORT);//服务器端口号sin.sin_addr.s_addr=inet_addr(SER_IP);//3.2连接到服务器if(connect(cfd,(struct sockaddr *)&sin,sizeof(sin))==-1){perror("connect error");return -1;}printf("连接服务器成功\n");//数据的收发char buf[128]="";while(1){printf("请输入>>>");fgets(buf,sizeof(buf),stdin);buf[strlen(buf)-1]=0;//将数据发送给服务器send(cfd,buf,sizeof(buf),0);printf("发送成功\n");//接受服务器发来的数据//清空容器bzero(buf,sizeof(buf));recv(cfd,buf,sizeof(buf),0);printf("收到的服务器消息为:%s\n",buf);}//关闭套接字close(cfd);return 0;
}

思维导图

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/398139.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

零基础5分钟学会谷歌云GCP核心云架构技能 - 成本分析篇

简介&#xff1a; 欢迎来到小李哥谷歌云GCP云计算知识学习系列&#xff0c;适用于任何无云计算或者谷歌云技术背景的开发者&#xff0c;让大家零基础5分钟通过这篇文章就能完全学会谷歌云一个经典的服务开发架构方案。 我将每天介绍一个基于全球三大云计算平台&#xff08;AW…

AI赋能周界安防:智能视频分析技术构建无懈可击的安全防线

周界安全防范是保护机场、电站、油库、监狱、工业园区等关键设施免受非法入侵和破坏的重要措施。传统的周界安防手段主要依靠人员巡查和物理屏障&#xff0c;但这种方式不仅人力成本高&#xff0c;而且效率较低&#xff0c;难以满足日益复杂多变的安全需求。随着AI技术的引入&a…

windows10和linux(debian12)设置静态ip————附带详细过程

文章目录 0 背景1 linux&#xff08;debian&#xff09;1.1 查看网络配置1.2 获取ip动态分配下的配置1.3 打开网络配置文件1.4 重新启动网络服务1.5 验证设置 2 windows2.1 查看自动获取ip地址下的配置2.2 进行设置 0 背景 因为下位机只能获取固定的ip&#xff08;ip池很小&am…

QT自定义系统快捷键任务

关键代码 //自定义快捷键检测 connect(this->ui->hotkeySequenceEdit_1, &QKeySequenceEdit::keySequenceChanged,this, &HotTestWidget::setShortcut_1);// 托盘显示 trayIcon new QSystemTrayIcon(this); QPixmap pixmap("tray.png"); QIcon icon(…

【网络】IP和MAC地址的映射——ARP协议和ARP欺骗概述

目录 引言 ARP的工作机制 ARP欺骗 ARP欺骗的断网行为 ARP欺骗成为中间人 工具介绍 个人主页&#xff1a;东洛的克莱斯韦克-CSDN博客 引言 同一子网内不同主机用数据链路层的MAC地址来寻址&#xff0c;而不是子网内的私有IP&#xff08;网络层&#xff09;。数据包中的IP…

JDBC如何避免SQL注入

JDBC如何避免SQL注入 一 . 什么是SQL注入 SQL注入&#xff08;SQL Injection&#xff09;是一种代码注入技术&#xff0c;它允许攻击者将或“注入”恶意的SQL命令到后端数据库引擎执行。这些恶意的SQL命令可以执行未授权的数据库查询、修改数据、管理数据库服务器上的文件系统…

三级_网络技术_20_路由器的配置及使用

1.封禁ICMP协议&#xff0c;只转发212.78.170.166/27所在子网的所有站点的ICMP数据包&#xff0c;正确的access-list配置是()。 Router (config)#access-list 110 permit icmp 212.78.170.166 0.0.0.0 any Router (config)#access-list 110 deny icmp any any Router (confi…

day2-网络连接网卡配置原理

1.window网卡 理解&#xff1a; window 有 2 块网卡 本地网卡 192.168.13.253 用于连接外网 vmnet8 10.0.0.1(装虚拟机自动生成的 如果没有自动生成…) 虚拟机添加 2 块网卡&#xff1a; 第一块网卡 NAT 模式 添加网卡的时候设置 NAT 模式 2 个作用&#xff0c;用于连接 wi…

C++_继承

继承 基础认识 像模板是函数和类代码的复用&#xff0c;而继承是对类代码的复用&#xff0c;都是更多的把复杂的任务交给编译器处理。 使用方法 继承的方式 class的默认继承方式是private&#xff0c;struct的默认继承方式是public&#xff0c;但还是最好加上。 protected成…

C++ 函数模板和类模板

参考视频&#xff1a;C类模板_哔哩哔哩_bilibili 遗留问题&#xff1a;编译器怎么处理函数模板和类模板 目录 一、为什么会有函数模版&#xff1f;函数模板是为了解决什么问题&#xff1f; 二、函数模板的概念 三、函数模版的使用 四、函数模板的特化 五、类模板的概念 …

基于ssm+vue+uniapp的英语学习交流平台小程序

开发语言&#xff1a;Java框架&#xff1a;ssmuniappJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;M…

排序算法之桶排序

title: 桶排序 date: 2024-7-25 18:58:19 0800 categories: 排序算法 tags:排序算法桶排序 description: 桶排序&#xff08;bucket sort&#xff09;是分治策略的一个典型应用。它通过设置一些具有大小顺序的桶&#xff0c;每个桶对应一个数据范围&#xff0c;将数据平均分配…

Qt—Qtcreator中自定义类时,下拉菜单中没有出现要继承的Qt类

问题描述&#xff1a;Qtcreator中自定义类时&#xff0c;下拉菜单中没有出现要继承的Qt类 这里我想要继承 QLineEdit 类&#xff0c;但是在这个下拉菜单中没有找到 我认为这个是qtcreator版本的问题&#xff0c;因为我直接去 #include 是可以找到这个类的 直接创建出来的类中…

Python Flask 与 Node.js Express

我的新书《Android App开发入门与实战》已于2020年8月由人民邮电出版社出版&#xff0c;欢迎购买。点击进入详情 构建 Web 应用程序时&#xff0c;选择正确的框架对于性能和可扩展性至关重要。Python 的 Flask 和 Node.js 的 Express 是两种流行的选择&#xff0c;它们根据项目…

重启人生计划-勇敢者先行

&#x1f973;&#x1f973;&#x1f973; 茫茫人海千千万万&#xff0c;感谢这一刻你看到了我的文章&#xff0c;感谢观赏&#xff0c;大家好呀&#xff0c;我是最爱吃鱼罐头&#xff0c;大家可以叫鱼罐头呦~&#x1f973;&#x1f973;&#x1f973; 如果你觉得这个【重启人生…

Go语言 Defer(延迟)

本文主要内容为Go语言中defer(延迟)介绍及应用文件读取使用defer的示例。 目录 定义 应用场景 代码示例 改为匿名函数 总结 定义 延迟&#xff1a;关键字&#xff0c;可以用于修饰语句、函数&#xff0c; 确保这条语句可以在当前栈退出的时候执行。 应用场景 1.一般用于…

SQL Server端口设置完整详细步骤

​ 大家好&#xff0c;我是程序员小羊&#xff01; 前言&#xff1a; 前面是对SQLserver服务器一些介绍&#xff0c;不想了解的可直接点击目录跳入正题&#xff0c;谢谢&#xff01;&#xff01;&#xff01; SQL Server 是由微软公司开发的关系数据库管理系统 (RDBMS)。它主要…

c++33 一级指针 字符串

拿到buf5 内存的首地址来释放内存 所以buf5不可改变 为了保证局部变量内存的局部性 字符串指针1级 如果没有拷入\0 则b还为一个数组 字符串拷贝函数 主调函数分配到内存 把g后面的内存变成\ 0 所以就改变了内存空间 考虑&#xff1a;主调用函数分配内存供被调用函数…

Python爬虫开发:BeautifulSoup、Scrapy入门

在现代网络开发中&#xff0c;网络爬虫是一个非常重要的工具。它可以自动化地从网页中提取数据&#xff0c;并且可以用于各种用途&#xff0c;如数据收集、信息聚合和内容监控等。在Python中&#xff0c;有多个库可以用于爬虫开发&#xff0c;其中BeautifulSoup和Scrapy是两个非…

FL Studio 24.1.1.4239中文破解版的安装激活详细教程

在数字音乐制作领域&#xff0c;FL Studio一直以其强大的功能和用户友好的界面而备受赞誉。随着技术的不断进步和音乐制作需求的日益增长&#xff0c;FL Studio 21.2.3的发布无疑为音乐创作者们带来了更为广阔的创作空间和更高效的制作工具。本文旨在深入探讨FL Studio 21.2.3的…