linux c UDP编程实现双向通信(学习记录)

2023-05-16

linux c 编程学习记录

程序说明:用linuxc网络编程的UDP套接字编程,实现内网中不同ip之间服务端和客户端的双向通信

Service端

#include <unistd.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <string.h>
#define PORTNO 60000
#define PORTS  56666
#define MSGSIZE 128
int main( void )
{ 
        int sfd,ret,len,sfd1;
        struct sockaddr_in st, cst;
        char msg[MSGSIZE];
        len = sizeof(struct sockaddr);
        sfd = socket( AF_INET, SOCK_DGRAM, 0);
        memset( &st, 0x0, len );
        st.sin_family = AF_INET;    //IPV4协议族
        st.sin_addr.s_addr = inet_addr("192.168.36.129");
        st.sin_port = htons(PORTNO);
        ret = bind( sfd, (struct sockaddr *)&st, len );
        len = sizeof(struct sockaddr);
        sfd1 = socket( AF_INET, SOCK_DGRAM, 0);
        memset( &cst, 0x0, len );
        cst.sin_family = AF_INET;    //IPV4协议族
        cst.sin_addr.s_addr = inet_addr("192.168.36.129");//ip地址
        cst.sin_port = htons(PORTS);   //设定端口号
        //接受客户端的数据
        while(1){
        ret = recvfrom( sfd, msg, MSGSIZE, 0, (struct sockaddr *)&st, (socklen_t *)&len );
        msg[ret]=0x0;
        printf("服务器从客户端接收的数据为:[%s]\n", msg);
        //发送服务端的数据
        char BUFF;
        scanf("%s",&BUFF);
        strcpy(msg,&BUFF);
        sendto( sfd1, msg, strlen(msg),0, (struct sockaddr *)&cst, (socklen_t)len );
        }
        return 0;
}

client端

#include <unistd.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <string.h>
#define PORTNO 60000
#define PORTS  56666
#define MSGSIZE 128
int main( void )
{
        int sfd,sfd1,ret,ret1;
        struct sockaddr_in st,cst;
        size_t len;
        char msg[MSGSIZE];
        len = sizeof(struct sockaddr);
        sfd = socket( AF_INET, SOCK_DGRAM, 0);
        memset( &st, 0x0, len );
        st.sin_family = AF_INET;    //IPV4协议族
        st.sin_addr.s_addr = inet_addr("192.168.36.129");
        st.sin_port = htons(PORTNO);   //设定端口号
        len = sizeof(struct sockaddr);
        sfd1 = socket( AF_INET, SOCK_DGRAM, 0);
        memset( &cst, 0x0, len );
        cst.sin_family = AF_INET;    //IPV4协议族
        cst.sin_addr.s_addr = inet_addr("192.168.36.129");
        cst.sin_port = htons(PORTS);
        ret = bind( sfd1, (struct sockaddr *)&cst, len );
        char BUFF;
		while(1){
        scanf("%s",&BUFF);
        strcpy(msg,&BUFF);
        sendto( sfd, msg, strlen(msg),0, (struct sockaddr *)&st, (socklen_t)len );
        ret = recvfrom( sfd1, msg, MSGSIZE, 0, (struct sockaddr *)&cst, (socklen_t *)&len );
        msg[ret]=0x0;
        printf("服务器从客户端接收的数据为:[%s]\n", msg);
        }
        return 0;
}
只做记录学习
(qq:九七二四三九三二九,有不懂的可以问我,一起学习)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

linux c UDP编程实现双向通信(学习记录) 的相关文章

  • 进程通信的方式

    进程通信 1 进程通信的概念 进程是一个独立的资源分配单元 xff0c 不同进程 xff08 主要是指不同的用户进程 xff09 之间的资源是独立的 xff0c 没有关联的 xff0c 不能在一个进程中直接访问另一个进程的资源 但是 xff
  • 网络通信的过程

    网络通信的过程 封装 上层协议时如何使用下层协议提供的服务的呢 xff1f 其实这是通过封装实现的 应用程序是在发送到物理网络上之前 xff0c 将沿着协议栈从上往下依次传递 每层协议都将在上层数据的基础上加上自己的头部信息 xff08 有
  • TCP三次握手、四次挥手

    TCP通信流程 TCP和UDP TCP和UDP区别如下 xff1a UDP xff1a 用户数据报文协议 xff0c 面向无连接 xff0c 可以单播 xff0c 多播 xff0c 广播 xff0c 面向数据报 xff0c 不可靠 TCP
  • Qt的多线程编程

    Qt线程 基本概念 并发 当有多个线程在操作时 xff0c 如果系统只有一个CPU xff0c 则它根本不可能真正同时进行一个以上的线程 xff0c 它只能把CPU运行时间划分成若干个时间段 xff0c 再将时间段分配给各个线程执行 xff
  • CMake编译C++文件

    这篇文章介绍如何使用cmake工具编译一个最简单的helloworld cpp文件 首先创建一个空的文件夹 mkdir cmake test 在该文件夹下 xff0c 我们新建一个helloworld cpp文件 span class to
  • 智能小车建图导航-在rviz中导航(运行)

    笔记来源 xff1a 机器人开发与实践 xff08 古月 xff09 或者直接运行这个脚本文件 xff1a xff08 如果你没有在 bracsh文件中加入source xff0c 建议加入或者在脚本文件的上面中添加source xff0c
  • 004-S500无人机-相关的器件参数以及计算

    这篇博客主要是记录S500无人机的相关器件的参数 xff0c 参数的来源来源于holybro官网 xff1a https shop holybro com 我这里进行参数的归纳以及计算 一 电机 xff08 2216 880kv xff09
  • TX2 学习记录(开启板载/USB摄像头)

    刚拿到手一个TX2 xff0c 简单地学习一下这块板子 xff0c 因为是学长留下来的板子 xff0c 所以刷机的步骤我就省略了 xff0c 各位小伙伴可以参考其他大佬的博客进行刷机 xff0c 再来就记录一下一些操作指令吧 打开USB摄像
  • ubuntu16.04中进行ROS通信编程

    ROS通信学习 基础知识学习字段ROS通信小例子一 创建一个工作区二 创建一个ROS工程包三 创建通信的发 收节点四 测试程序的正确性 图像ROS通信小例子视频ROS通信小例子多机ROS通信 基础知识学习 x1f31f 话题与服务的区别 话
  • 2021电赛F题智能送药小车方案分析(openMV数字识别,红线循迹,STM32HAL库freeRTOS,串级PID快速学习,小车自动返回)

    2021全国大学生电子设计竞赛F题智能送药小车 前提 xff1a 本篇文章重在分享自己的心得与感悟 xff0c 我们把最重要的部分 xff0c 摄像头循迹 xff0c 摄像头数字识别问题都解决了 xff0c 有两种方案一种是openARTm
  • CARLA常见错误解决方案以及常见的问题解决方案

    记录Linux环境 Windows环境下常见的运行自动驾驶仿真器CARLA出现的错误 问题1 问题1比较基础 xff0c 创建虚拟环境以及删除虚拟环境 conda create span class token operator span
  • cmd找不到conda以及通过cmd启用Anaconda中的Python环境(base)

    问题 xff1a 在cmd中输入python无法进入或启用python ipython conda jupyter notebook 一 解决方法 xff1a 在系统环境中添加Anaconda路径 lt 1 gt 1 打开高级系统设置 xf
  • c语言实现strcat函数

    char strcat char strDestination const char strSource 一 函数介绍 作用 xff1a 连接字符串的函数 xff0c 函数返回指针 xff0c 两个参数都是指针 xff0c 第一个参数所指向
  • C/C++的static关键字作用(转载)

    一 限制符号的作用域只在本程序文件 若变量或函数 xff08 统称符号 xff09 使用static修饰 xff0c 则只能在本程序文件内使用 xff0c 其他程序文件不能调用 xff08 非static的可以通过extern 关键字声明该
  • crc校验

    参考链接 xff1a https www cnblogs com esestt archive 2007 08 09 848856 html 一 CRC校验原理 1 CRC校验全称为循环冗余校验 xff08 Cyclic Redundanc
  • ubuntu安装eclipse教程

    在安装eclipse之前 xff0c 要先安装JDK xff0c 一 安装JDK 1 从官网上下载JDK 链接 xff1a https www oracle com java technologies downloads 选择的jdk文件一
  • UDP通信入门篇

    UDP通信属于网络通信中的一种方式 xff0c 需要用套接字来进行通信 初接触UDP通信时 xff0c 不知道需要链接静态库 pragma comment lib ws2 32 lib xff0c 导致自己在前期浪费了很多时间去排查问题 除
  • window11配置深度学习环境

    Anaconda 43 PyCharm 43 CUDA 43 CUDNN 43 PyTorch 1 Anaconda安装 下载路径 xff1a https www anaconda com 安装方式 xff1a 以管理员身份安装 中间选项
  • python配置opencv环境后,读取图片,报错:can‘t open/read file: check file path/integrity

    运行出错代码 xff1a import cv2 import numpy as np image 61 cv2 imread 39 C Pictures 桌面背景图片切换 wallhaven 6oq1k7 jpg 39 cv2 IMREAD
  • 断言

    代码中放置一些假设 xff0c 通过判断假设是否为真 xff0c 进而判断程序是否正确 断言就是用来测试程序中的假设是否正确的 xff0c 若果假设被违反 xff0c 那么就中断程序的执行 断言assert是定义在assert h中的 宏

随机推荐