基于Socket编程下 实现Linux-Linux、Linux-Windows udp通信

news2024/11/24 18:59:40

文章目录

  • 一、通信实现
  • 二、Linux-Linux
    • 1. 服务器 Server
    • 2. 客户端 Client
  • 三、Linux-Windows
    • 1. 服务器 Linux_Server
    • 2. 客户端 Windows_Client
  • 程序源码


一、通信实现

1. Linux-Linux
在虚拟机下开启俩个终端,分别运行服务器和客户端程序(服务器运行在前,客户端运行在后)
在这里插入图片描述
2. Linux-Windows
①客户端 Windows_Client
在这里插入图片描述
②服务器 Linux_Server
在这里插入图片描述

二、Linux-Linux

1. 服务器 Server

①头文件声明

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<string.h>
#include<assert.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>

②创建套接字

int sockfd = socket(AF_INET,SOCK_DGRAM,0);

③指定IP地址与端口号

struct sockaddr_in saddr,caddr;
memset(&saddr,0,sizeof(saddr));
saddr.sin_family = AF_INET;
saddr.sin_port = htons(8080);//普通数字可以用htons()函数转换成网络数据格式的数字)
saddr.sin_addr.s_addr = inet_addr("192.168.124.16");//将点分十进制的IP地址转化为二进制

④绑定

bind(sockfd,(struct sockaddr*)&saddr,sizeof(saddr));

UDP不用listen监听

⑤接收客户端发送过来的数据

recvfrom(sockfd,buff,127,0,(struct sockaddr*)&caddr,&len);

⑥发送消息给客户端

sendto(sockfd,"OK",2,0,(struct sockaddr*)&caddr,sizeof(caddr));

⑦关闭套接字

close(sockfd);

2. 客户端 Client

①头文件声明

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<string.h>
#include<assert.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>

②创建套接字

sockfd = socket(AF_INET,SOCK_DGRAM,0);

③指定IP地址和端口号

struct sockaddr_in saddr;
memset(&saddr,0,sizeof(saddr));
saddr.sin_family = AF_INET;
saddr.sin_port = htons(8080);
saddr.sin_addr.s_addr = inet_addr("192.168.124.16");

④向服务器发送消息

fgets(buff,128,stdin);
sendto(sockfd,buff,strlen(buff),0,(struct sockaddr*)&saddr,sizeof(saddr));

⑤接收服务器发过来的消息

recvfrom(sockfd,buff,127,0,(struct sockaddr*)&saddr,&len);

⑥关闭套接字

close(sockfd);

三、Linux-Windows

1. 服务器 Linux_Server

①头文件声明

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<string.h>
#include<assert.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>

②创建套接字

int sockfd = socket(AF_INET,SOCK_DGRAM,0);

③指定IP地址与端口号

struct sockaddr_in saddr,caddr;
memset(&saddr,0,sizeof(saddr));
saddr.sin_family = AF_INET;
saddr.sin_port = htons(8080);//普通数字可以用htons()函数转换成网络数据格式的数字)
saddr.sin_addr.s_addr = inet_addr("192.168.124.16");//将点分十进制的IP地址转化为二进制

④绑定

bind(sockfd,(struct sockaddr*)&saddr,sizeof(saddr));

UDP不用listen监听

⑤接收客户端发送过来的数据

recvfrom(sockfd,buff,127,0,(struct sockaddr*)&caddr,&len);

⑥发送消息给客户端

sendto(sockfd,"OK",2,0,(struct sockaddr*)&caddr,sizeof(caddr));

⑦关闭套接字

close(sockfd);

2. 客户端 Windows_Client

①声明头文件与库

#include <stdio.h>
#include <Windows.h>
#include <assert.h>

#pragma comment(lib, "ws2_32.lib")

②Sockets初始化信息

WSADATA s; 
if (WSAStartup(MAKEWORD(2, 2), &s) != 0) // 通过连接两个给定的无符号参数,首个参数为低字节,使用2.2版本的Socket
   {
        printf("Init Windows Socket Failed! Error: %d\n",GetLastError());
        getchar();
        return -1;
    }

③创建套接字

SOCKET sockfd = socket(AF_INET,SOCK_DGRAM,0);

④指定IP地址和端口号

struct sockaddr_in saddr;
memset(&saddr,0,sizeof(saddr));
saddr.sin_family = AF_INET;
saddr.sin_port = htons(8080);
saddr.sin_addr.s_addr = inet_addr("192.168.124.16");

⑤向服务器发送消息

fgets(buff,128,stdin);
sendto(sockfd,buff,strlen(buff),0,(struct sockaddr*)&saddr,sizeof(saddr));

⑥接收服务器发过来的消息

recvfrom(sockfd,buff,127,0,(struct sockaddr*)&saddr,&len);

⑦关闭套接字

closesocket(sockfd);
WSACleanup( );

程序源码

若需程序源码可在评论区留言QQ邮箱 或 直接私信即可。

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

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

相关文章

栈的简单实现及应用

栈的简单实现及其应用什么是栈&#xff1f;栈的分类栈的数据结构栈的基本操作栈的初始化栈的销毁入栈操作出栈和栈空的判断获取栈顶元素获取栈的元素个数头文件总结栈的应用什么是栈&#xff1f; 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除…

【毕业设计】垃圾邮件(短信)分类算法研究与实现 - 机器学习

文章目录1 前言2 垃圾短信/邮件 分类算法 原理2.1 常用的分类器 - 贝叶斯分类器3 数据集介绍4 数据预处理5 特征提取6 训练分类器7 综合测试结果8 其他模型方法9 最后1 前言 &#x1f525; Hi&#xff0c;大家好&#xff0c;这里是丹成学长的毕设系列文章&#xff01; &#…

Vue面试题-答案、例子

1、Vue的生命周期 每一个vue实例从创建到销毁的过程&#xff0c;就是这个vue实例的生命周期。在这个过程中&#xff0c;他经历了从开始创建、初始化数据、编译模板、挂载Dom、渲染→更新→渲染、卸载等一系列过程。 将要创建 >调用beforeCreate函数 创建完毕 >调用creat…

振弦采集模块复位( 重启)及恢复出厂设置

振弦采集模块复位&#xff08; 重启&#xff09;及恢复出厂设置 以下几种情况&#xff08;或操作&#xff09;可使模块产生复位动作&#xff0c;重新启动。 &#xff08; 1&#xff09; 在模块正常工作期间&#xff0c;向寄存器 SYS_FUN 发送软复位指令 0x01&#xff1b; &…

74ls192无法正常使用。

分析与解决74ls192芯片无法在proteus中正常运行 博主最近要做电子技术课程设计&#xff0c;于是重新拾起了长久不用的proteus。在构建倒计时电路时&#xff0c;发现了一个问题&#xff1a; 74ls192芯片&#xff0c;在软件提供的时钟信号下能正常开启计时。但是在自己使用的55…

从理论到实践:MySQL性能优化和高可用架构,一次讲清

数据库系统作为IT业务系统的核心&#xff0c;其高可用性和容灾能力对整个业务系统的连续性和数据完整性起着至关重要的作用&#xff0c;是企业正常运营的基石 尤其是在性能优化与高可用架构两方面&#xff0c;很多从业多年的DBA限于生产环境的固定体系&#xff0c;往往盲人摸象…

Grafana-web使用说明

本文分别记录了&#xff1a; Grafana使用步骤P50 P99 min max m1_rate等指标分别是什么意思&#xff0c;Metrics为何不会对“吞吐量”指标记录P99 min 等聚合Metrics常用的几种记录方式&#xff08;我司用了两种&#xff09; 1.场景 Metrics收集日志交给Graphite&#xff08;…

第九节:类和对象【三】【static、代码块、对象的打印】

目录 &#x1f947;1.什么是封装 &#x1f4d8;1.1封装的实现 &#x1f392;2.static成员 &#x1f4d2;2.1 再谈学生类 ​编辑 &#x1f4d7;2.2 static修饰成员变量 2.3 static修饰成员方法 &#x1f4d5;2.4 static成员变量初始化 &#x1f532;3. 代码块 &#x…

第四届全国中医药院校大学生程序设计竞赛 : 二进制码(Python)

文章目录题目描述输入输出样例输入 Copy样例输出 Copy代码测试题目描述 在计算机中&#xff0c;对于定点数有三种不同的表示方法。在本题中&#xff0c;假定码的长度固定为 8 位&#xff0c;从左往右依次编号为第 1 到 8 位&#xff0c;第 1 位为最高位。 x 的原码&#xff1a…

Python爬虫实战(七):某讯较真辟谣小程序爬虫

追风赶月莫停留&#xff0c;平芜尽处是春山。 文章目录追风赶月莫停留&#xff0c;平芜尽处是春山。一、准备工作二、目标分析二、接口分析url分析返回数据分析三、编写代码获取数据保存数据完整代码大四考研狗没时间更新博客了&#xff0c;大家勿怪&#xff0c;等我有学上了&a…

手把手带你搭建个人博客系统(二)

⭐️前言⭐️ 因文章篇幅较长&#xff0c;所以整个流程分两篇文章来完成。 &#x1f349;博客主页&#xff1a; &#x1f341;【如风暖阳】&#x1f341; &#x1f349;精品Java专栏【JavaSE】、【备战蓝桥】、【JavaEE初阶】、【MySQL】、【数据结构】 &#x1f349;欢迎点赞…

Matplotlib设置限制制作

Matplotlib自动到达要沿着图的x&#xff0c;y(以及3D图的情况下为z轴)轴显示的变量的最小值和最大值。但是&#xff0c;可以使用set_xlim()和set_ylim()函数显式设置限制。 在下图中&#xff0c;显示了x和y轴的自动缩放限制 - #! /usr/bin/env python #codingutf-8 import matp…

【关于Linux中----进程控制和进程替换】

文章目录一、进程创建二、进程终止2.1进程退出场景2.2进程退出方法三、进程等待3.1进程等待必要性3.2进程等待的方法3.3获取子进程status四、进程程序替换4.1替换原理4.2替换函数4.3命名理解五、总结一、进程创建 谈到创建进程&#xff0c;不得不提到一个函数----fork。 在li…

【Python】一个矩阵根据某一列选择大于或小于范围的数据

data_all data_all[data_all[:,3]>54201]data_all data_all[data_all[:, 3] < 54220] 上面就是根据数据的第3列&#xff0c;选取54201到54220的范围的数据&#xff1a;

单片机最小系统

单片机最小系统,或者称为最小应用系统,是指用最少的元件组成的单片机可以工作的系统. 对51系列单片机来说,最小系统一般应该包括:单片机、晶振电路、复位电路. 下面给出一个51单片机的最小系统电路图. 晶振电路&#xff1a; 单片机里都有晶振&#xff0c;在单片机系统里晶振作用…

2013年第四届C/C++ A组蓝桥杯省赛真题+解析+代码

目录 第一题&#xff1a;高斯日记 题目描述 思路分析 AC代码 第二题&#xff1a;排它平方数 题目描述 思路分析 AC代码 第三题&#xff1a;振兴中华 题目描述 思路分析 AC代码 第四题&#xff1a;颠倒的价牌 题目描述 思路分析 AC代码 第五题&#xff1a;前缀…

jsp就业管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 JSP 就业管理系统 是一套完善的web设计系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开 发&#xff0c;数据库为Mysql&#xff0c;使用ja…

蓝桥杯备赛(三)

目录 前言&#xff1a; 一、门牌制作 解析&#xff1a; 代码实现 二、寻找2020 解析&#xff1a; 代码实现 三、蛇形填数 解析&#xff1a; 代码实现 四、成绩分析 解析&#xff1a; 代码实现 五、单词分析 解析&#xff1a; 代码实现 小结&#xff1a; 前言&am…

热门Java开发工具IDEA入门指南——了解并学习IDE

IntelliJ IDEA&#xff0c;是java编程语言开发的集成环境。IntelliJ在业界被公认为最好的java开发工具&#xff0c;尤其在智能代码助手、代码自动提示、重构、JavaEE支持、各类版本工具(git、svn等)、JUnit、CVS整合、代码分析、 创新的GUI设计等方面的功能可以说是超常的。 本…

面试了1个月连续失败4次,自动化测试真没想象的那么简单

我干测试6年了&#xff0c;最近面试又碰壁了… 这大概是我这一个月来第4次面试失败了&#xff0c;起初我投简历比较勇猛&#xff0c;奔着薪资高的有点儿名气的企业就开始海投&#xff0c;碰上了2家还不错的邀约面试&#xff0c;前面交流还行&#xff0c;一问到自动化测试就傻眼…