c语言 socket 报文解析,C语言实现Socket简单通信

环境是linux,不过应该没什么影响,因为只用到了socket的基本用法,没有涉及pthread等。

分为服务器端和客户端,服务器端监听端口发来的请求,收到后向客户端发送一个Hello World,客户机负责发送消息并打印收到的Hello World.

服务器步骤:建立socket,绑定socket和地址信息,开启监听,收到请求后发送数据。

客户端步骤:建立socket,连接服务器端,接收并打印服务器给的数据。

服务器端代码:

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define MYPORT 8887

#define QUEUE 20

#define BUFFER_SIZE 1024

int main()

{

///定义sockfd

int server_sockfd = socket(AF_INET,SOCK_STREAM, 0);

///定义sockaddr_in

struct sockaddr_in server_sockaddr;

server_sockaddr.sin_family = AF_INET;

server_sockaddr.sin_port = htons(MYPORT);

server_sockaddr.sin_addr.s_addr = htonl(INADDR_ANY);

///bind,成功返回0,出错返回-1

if(bind(server_sockfd,(struct sockaddr *)&server_sockaddr,sizeof(server_sockaddr))==-1)

{

perror("bind");

exit(1);

}

///listen,成功返回0,出错返回-1

if(listen(server_sockfd,QUEUE) == -1)

{

perror("listen");

exit(1);

}

///客户端套接字

char buffer[BUFFER_SIZE];

struct sockaddr_in client_addr;

socklen_t length = sizeof(client_addr);

///成功返回非负描述字,出错返回-1

int conn = accept(server_sockfd, (struct sockaddr*)&client_addr, &length);

if(conn<0)

{

perror("connect");

exit(1);

}

while(1)

{

memset(buffer,0,sizeof(buffer));

int len = recv(conn, buffer, sizeof(buffer),0);

if(strcmp(buffer,"exit

")==0)

break;

fputs(buffer, stdout);

send(conn, buffer, len, 0);

}

close(conn);

close(server_sockfd);

return 0;

}

客户端代码:

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define MYPORT 8887

#define BUFFER_SIZE 1024

int main()

{

///定义sockfd

int sock_cli = socket(AF_INET,SOCK_STREAM, 0);

///定义sockaddr_in

struct sockaddr_in servaddr;

memset(&servaddr, 0, sizeof(servaddr));

servaddr.sin_family = AF_INET;

servaddr.sin_port = htons(MYPORT); ///服务器端口

servaddr.sin_addr.s_addr = inet_addr("127.0.0.1"); ///服务器ip

///连接服务器,成功返回0,错误返回-1

if (connect(sock_cli, (struct sockaddr *)&servaddr, sizeof(servaddr)) < 0)

{

perror("connect");

exit(1);

}

char sendbuf[BUFFER_SIZE];

char recvbuf[BUFFER_SIZE];

while (fgets(sendbuf, sizeof(sendbuf), stdin) != NULL)

{

send(sock_cli, sendbuf, strlen(sendbuf),0); ///发送

if(strcmp(sendbuf,"exit

")==0)

break;

recv(sock_cli, recvbuf, sizeof(recvbuf),0); ///接收

fputs(recvbuf, stdout);

memset(sendbuf, 0, sizeof(sendbuf));

memset(recvbuf, 0, sizeof(recvbuf));

}

close(sock_cli);

return 0;

}

实验结果:

8725b85ddc5983a95dcbc27db270d38b.png

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

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

相关文章

不思议迷宫c语言基础,不思议迷宫神龙收藏品一览

不思议迷宫神龙收藏品一览是9K9K小编柚子人为大家带来的&#xff0c;七龙珠召唤神龙作为游戏最为迷人的彩蛋之一&#xff0c;召唤神龙拿钻石作为众多玩家的首选目标&#xff0c;但神龙的收藏品你知道多少呢&#xff0c;下面不妨详细了解一下吧。神龙收藏品一览&#xff1a;无限…

leetcode数组汇总_LeetCode刷题:前言

LeetCode刷题&#xff1a;前言前言作为一个对编程超级不通的小白&#xff0c;在2020年11月开始打算正式的刷LeetCode。&#xff08;PS&#xff1a;前面有刷过&#xff0c;但是都是随机&#xff0c;看心情乱刷的&#xff0c;刷完后也没有什么感觉&#xff0c;该不会的还是不会&a…

通信基站c语言,[转]2015年数学建模C题–基于无线通信基站的室内三维定位问题...

之前做的一题跟大家分享一下&#xff0c;实际该题数据出的有点问题(个人看法不喜勿喷)。这题主要是做基站定位的&#xff0c;方法主要是用的基于几何的方法。该题总共四题&#xff0c;由于只有测试case可以验证性能&#xff0c;非测试case的结果我就不放了在本题中&#xff0c;…

php redis 投票_高可用Redis服务架构分析与搭建

HorstXuhttps://www.cnblogs.com/xuning/p/8464625.html基于内存的Redis应该是目前各种web开发业务中最为常用的key-value数据库了&#xff0c;我们经常在业务中用其存储用户登陆态&#xff08;Session存储&#xff09;&#xff0c;加速一些热数据的查询&#xff08;相比较mysq…

android studio 启动画面,Android Studio 利用Splash制作APP启动界面的方法

public class SplashActivity extends Activity {// private final int SPLASH_DISPLAY_LENGHT 2000; // 两秒后进入系统Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);getWindow().addFlags(WindowManager.LayoutParams.…

android驱动测试,Android: 通过 cucumber 驱动 monkey 做稳定性测试

主要内容稳定性测试是什么Monkey 介绍自动化 Monkey稳定性测试是什么通过随机点击屏幕一段时间&#xff0c;看看 app 会不会奔溃&#xff0c;能不能维持正常运行。Monkey 介绍Monkey 是一个命令行工具&#xff0c;它可以运行在我们的模拟器或者设备当中。它可以发送一些伪随机(…

gazebo 直接获取传感器数据_5个使传感器更简单的技巧

传感器遍布地球表面和周围空间&#xff0c;为世界提供数据。这些廉价的传感器是物联网背后的驱动力之一&#xff0c;也是我们社会现在面临的数字革命。然而&#xff0c;连接到传感器并从传感器获取数据并不总是直截了当或容易的。这里有五个提示&#xff0c;可以帮助工程师第一…

鸿蒙os吃内存吗,终于上手机!华为鸿蒙 OS 2.0 系统:128KB 内存就能跑

终于上手机&#xff01;华为鸿蒙 OS 2.0 系统&#xff1a;128KB 内存就能跑2020-09-11 10:51:480点赞0收藏0评论9月11日消息&#xff0c;华为昨天下午在东莞松山湖举办了全球开发者大会&#xff0c;本次大会带来了全新的 EMUI 11 系统和备受期待的鸿蒙 OS 2.0 操作系统&#xf…

华为鸿蒙无人驾驶,特斯拉最大的对手竟是华为?Hicar+鸿蒙OS无人驾驶技术不再一家独大!...

原标题&#xff1a;特斯拉最大的对手竟是华为&#xff1f;Hicar鸿蒙OS无人驾驶技术不再一家独大&#xff01;短短几个月的时间&#xff0c;特斯拉的市值翻了近4倍&#xff0c;对于一个超级企业来说一切都显得那么不可思议&#xff0c;如果把它单纯的看成一家车企&#xff0c;恐…

鸿蒙系统会不会影响游戏,令人担心,鸿蒙系统会不会让人失望?未来难说

如今&#xff0c;一直被炒的沸沸扬扬的鸿蒙系统&#xff0c;终于在2019年8月9日发布了&#xff0c;次日&#xff0c;也就是8月10日&#xff0c;荣耀的智慧屏又带着鸿蒙系统出现了一次&#xff0c;荣耀智慧屏也成为了首次搭载鸿蒙系统的终端&#xff0c;见证了中国操作系统的历史…

buck电路上下管_推荐 | 学好电路设计与仿真?你不能错过这两本书籍 ~

网 友小编&#xff0c;有没有 Saber 相关书籍可以推荐一下&#xff1f;还有&#xff0c;Saber 软件下载那个版本比较好&#xff1f;当然有啦&#xff01;小 编《Saber 电路仿真及开关电源设计》柯福波 等编著本书以 Saber 开关电源为基础&#xff0c;以具体工程电路为范例&am…

怎么批量修改html文件后缀,如何批量修改文件后缀名

我们都知道电脑文件都有一个格式&#xff0c;比如JPG、MP3等等格式&#xff0c;每个格式都代表不一样文件类型&#xff0c;那么我们该如何批量更改文件类型的后缀呢?比如把JPG更改为MP3&#xff0c;只要在电脑里设置不隐藏文件扩展名&#xff0c;然后建立统一的文件夹&#xf…

python 怎么调用 矩阵 第几行_第58集 python机器学习:混淆矩阵精度指标

混淆矩阵的精度计算公式为&#xff1a;精度(TPTN)/(TPTNFPFN)&#xff0c;也就是说&#xff0c;精度就是指正确的预测数目除以所有样本的数量。准确率、召回率与f-分数&#xff1a;总结混淆矩阵还有几种方法&#xff0c;其中最常见的就是准确率和召回率。准确率度量的是被预测为…

android seekbar闪退,android seekbar 踩坑之路

最近项目中有用到seekbar&#xff0c;之前对这东西不太了解&#xff0c;趁机来踩坑。seekbar样式按我觉得Material 中的还不算难看了。但是美工给了自己的样式&#xff0c;还是得改。主要有这2个属性:android:thumb"drawable/thumb"android:progressDrawable"dr…

华为鸿蒙系统还没发布吗,华为没有孤军奋战,合作伙伴“雪中送炭”,鸿蒙系统正式发布!...

6月2日晚上&#xff0c;期待许久的鸿蒙0S 2终于正式登场了&#xff0c;这意味着鸿蒙手机已经变成了面向市场的正式产品&#xff0c;这是华为迈出的一小步&#xff0c;却是国产系统与安卓、iOS竞争的开始。在鸿蒙OS正式推出后&#xff0c;不少华为手机用户已经收到了系统更新的推…

计算机不能进入桌面,电脑开机无法进入桌面,请高手解决。

该故障是Windows XP操作系统关机故障中最容易出现的故障。造成该故障的原因可能有以下几方面原因&#xff1a;系统设置在添乱Windows XP默认情况下&#xff0c;当系统出现错误时会自动重新启动&#xff0c;这样当用户关机时&#xff0c;如果关机过程中系统出现错误就会重新启动…

幼儿园体育游戏电子计算机教案,【幼儿园体育跳圈圈教案】小班体育教案跳圈圈_小班跳圈圈游戏教案_亲亲宝贝网...

教案二&#xff1a;小兔跳圈活动目标&#xff1a;1、在原地纵跳和短距离双脚连续向前跳的基础上&#xff0c;尝试较长距离双脚连续向前跳圈。2、提高身体的协调能力和弹跳能力。活动准备&#xff1a;1、材料准备&#xff1a;呼啦圈若干、小兔头饰、蘑菇、篮子。2、游戏场地设置…

crtsiii型无砟轨道板_自主知识产权CRTSⅢ型轨道板助力,赣深铁路无砟轨道轨道板灌注第一工作面完成...

(本报河源讯 通讯员 陈前名 杨琰妤)11月29日&#xff0c;伴随着碧源中桥轨道板最后一方自密实混凝土浇筑完成&#xff0c;标志着由中国中铁四局机电公司赣深铁路项目部负责施工的第一工作面无砟轨道工程圆满完成&#xff0c;为实现年底全线轨道板全部灌注的目标奠定了坚实基础。…

聋人工学院计算机老师,聋人工学院12位手语老师用双手传递声音

在全国第十届残运会暨第七届特奥会上有一个特殊的节目&#xff0c;它虽然是舞蹈&#xff0c;但表演者却听不见背景音乐&#xff0c;它虽然需要踩点&#xff0c;但表演者却只能靠记忆与眼睛去完成每一个节拍。70名理工大学聋人工学院的听障同学将克服身体残疾&#xff0c;共同演…