Linux系统编程,socket通信编程实践练习(C语言)

news2024/11/25 21:54:10

文章目录

  • Linux系统编程,socket通信编程实践练习(C语言)
    • 1.服务端代码
    • 2.客户端代码

Linux系统编程,socket通信编程实践练习(C语言)

1.服务端代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <ctype.h>
#define SERV_PORT 8000

int main(void) {
    //默认打开1024个文件描述符
    int sfd, cfd, len;
    //表示IPv4地址和端口号的数据结构
    struct sockaddr_in server_addr, client_addr;
    char buf[4096];
    socklen_t addr_len;
    //第一个参数选择网络通信层,ipv4,第二个:传输层协议tcp,udp,第三个:0,默认协议
    sfd = socket(AF_INET, SOCK_STREAM, 0);
    绑定前先初始化地址
    bzero(&server_addr, sizeof(server_addr));
    //ipv4
    server_addr.sin_family = AF_INET;
    //端口号
    server_addr.sin_port = htons(SERV_PORT);
    //ip地址
    server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
    //第一个:socket文件描述符,第二个:绑定的地址,ip地址和端口号,第三个:表示结构体的长度
    bind(sfd, (struct sockaddr *)&server_addr, sizeof(server_addr));
    //监听服务器能并发链接的能力
    listen(sfd, 128);

    addr_len = sizeof(client_addr);
    //第一个:socket的文件描述符,第二个:客户端的ip和端口号,第三个:用于传递client_addr结构体的长度
    //cfd用于跟客户端通信 等待客户端连接
    cfd = accept(sfd, (struct sockaddr *)&client_addr, &addr_len);
    while(1){
    //读取fd中的数据
    len = read(cfd, buf, sizeof(buf));
    //大小写转换测试
    
    int i;
    for(i = 0; i < len; i++) 
    	buf[i] = toupper(buf[i]);
    //回写数据给客户端
    write(cfd, buf, len);
    }
    close(cfd);
    close(sfd);
    return 0;

}

先运行服务端

在这里插入图片描述

我们再开一个命令行端口测试,成功

在这里插入图片描述

2.客户端代码

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

#define MAXLINE 80
#define SERV_PORT 8000
int main(int argc, char *argv[]){

   int sfd, len;
   char buf[4096];
   sfd = socket(AF_INET, SOCK_STREAM, 0);

   struct sockaddr_in servaddr;
   //这段代码的作用是确保程序启动时必须提供服务器地址,否则就会退出
   if (argc < 2)
    {
        fputs("./client server\n", stderr);
        exit(1);
    }
   bzero(&servaddr, sizeof(servaddr));
    servaddr.sin_family = AF_INET;
    inet_pton(AF_INET, argv[1], &servaddr.sin_addr.s_addr);
    servaddr.sin_port = htons(SERV_PORT);
   //第一个:文件描述符,第二个:ip和端口号,第三:结构体的长度
   connect(sfd, (struct sockaddr *)&servaddr, sizeof(servaddr));
   while(fgets(buf, sizeof(buf), stdin)){
     write(sfd, buf, strlen(buf));
      len = read(sfd, buf, sizeof(buf));
     write(STDOUT_FILENO, buf, len);
   }
   return 0;
}

运行服务端再运行客户端,输入ip地址,进行交互

在这里插入图片描述

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

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

相关文章

Linux纯C串口开发

为什么要用纯C语言 为了数据流动加速&#xff0c;实现低配CPU建立高速数据流而不用CPU干预&#xff0c;避免串口数据流多次反复上升到软件应用层又下降低到硬件协议层。 关于termios.h 麻烦的是&#xff0c;在 Linux 中使用串口并不是一件最简单的事情。在处理 termios.h 标头…

Geth的进行合约部署和调用合约方法

环境 Ubuntu20 geth : 1.10.5-stable go: 1.17 前言 还未安装geth的读者可以参考这篇文章 Geth的安装并简单使用篇 我们需要进入geth交互式控制台进行操作 root192-168-19-133:~# geth --dev console INFO [10-03|22:25:29.918] Starting Geth in ephemeral dev mode... INFO…

list集合中的元素排序

目录 一、利用lambda对list集合排序 二、对对象集合操作&#xff0c;其实与基本类型集合操作类似 三、对 JSONArray 排序 一、利用lambda对list集合排序 先定义一个集合 List<Integer> list new ArrayList<>(); list.add(1); list.add(5); list.add(4); list…

基于SSM的酒店客房预定管理系统

基于SSM的酒店客房预定管理系统的设计与实现~ 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringSpringMVCMyBatis工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 前台主页 客房详情 登录界面 管理员界面 用户界面 摘要 基于SSM&#xff08;…

逻辑分析仪与示波器选择

一、简介 逻辑分析仪是利用时钟从测试设备上采集和显示数字信号的仪器&#xff0c;最主要的作用在于时序判定。逻辑分析仪与示波器不同&#xff0c;它不能显示连续的模拟量波形&#xff0c;而只显示高低两种电平状态&#xff08;逻辑1和0&#xff09;。在设置了参考电压后&…

JDK环境变量配置

windows系统 1. win建 r 输入sysdm.cpl打开系统属性界面。选择高级栏目&#xff0c;点击环境变量菜单。 2. 选择系统变量中的新建&#xff0c;变量名输入JAVA_HOME&#xff0c;变量值输入jdk安装目录&#xff0c;例如&#xff1a;D:\Java\jdk1.8.0_91。 3. 选择编辑系统变量中…

容斥原理,多步容斥

容斥意义法 设计状态表示容斥的过程。比较简单的容斥题目一般可以容斥意义。 如果我们要求方案数的话&#xff0c;通常情况下我们的把限制视为两个方面&#xff0c;一方面是总限制&#xff0c;一方面是对于每个物品的限制&#xff0c;这样设集合 S i S_i Si​表示满足总限制以及…

VSCode 如何设置背景图片

VSCode 设置背景图片 1.打开应用商店&#xff0c;搜索 background &#xff0c;选择第一个&#xff0c;点击安装。 2. 安装完成后点击设置&#xff0c;点击扩展设置。 3.点击在 settings.json 中编辑。 4.将原代码注释后&#xff0c;加入以下代码。 // { // "workben…

中海达守护电力人员作业安全

近日&#xff0c;中海达为电网某换流站作业人员提供的160余套北斗高精度定位产品顺利完成交付。通过使用北斗高精度定位技术&#xff0c;帮助换流站实现了人员&#xff08;车辆&#xff09;位置实时定位、电子围栏实时预警、远程作业指导等应用效果&#xff0c;用高科技保障电网…

红米redmi note7救砖/线刷/ROOT教程

一直循环开机界面&#xff0c;需要刷机 准备 使用windows电脑安装如下 MiUsbDriver.exe电脑连接小米手机驱动。可以去https://www.miui.com/unlock/index.html下载压缩包&#xff0c;里面有这个程序小米ROM固件包找一个适合自己手机型号的的即可&#xff0c;官网也可以下载但…

3D RPG Course | Core 学习日记三:Navigation智能导航地图烘焙

前言 前面我们已经绘制好了一个简单的地图场景&#xff0c;现在我们需要使用Navigation给地图做智能导航&#xff0c;以实现AI自动寻路&#xff0c;以及设置地图的可行走区域以及不可行走区域&#xff0c;Navigation的基础知识、原理、用法在Unity的官方文档&#xff0c;以及网…

Modelsim 使用教程(2)——Basic Simulation

一、概述 在本文中&#xff0c;我们将介绍Modelsim基本的仿真流程&#xff0c;包括有&#xff1a; Create the Working Design Library&#xff08;创建工具库&#xff09; Compile the Design Units&#xff08;编译设计单元&#xff09; Optimize the Design&#xff08;优化…

单工通信、半双工通信、全双工通信分别是什么?

单工通信&#xff1a; 单工通信是一种单向传输数据的通信方式&#xff0c;只允许信息在一个方向上流动。在单工通信中&#xff0c;通信的两个节点中的一个节点只能作为发送方&#xff0c;而另一个节点只能作为接收方。发送方只负责发送数据&#xff0c;而接收方只负责接收数据&…

LLMs之Agent之AutoGen:AutoGen的简介、安装、使用方法之详细攻略

LLMs之Agent之AutoGen&#xff1a;AutoGen的简介、安装、使用方法之详细攻略 目录 AutoGen的简介、安装、使用方法 1、多Agent对话框架 2、AutoGen的对话流程 3、增强的LLM推理 AutoGen的安装 1、安装 2、快速测试 AutoGen的使用方法 1、基础用法 (1)、启动两个代理之…

C++:map和set的基本使用

文章目录 搜索模型关联式容器setset的基本使用set的其他使用 multisetmapmap的基本使用map中的[] multimap 搜索模型 在实际搜索中有两个搜索模型&#xff1a;Key的搜索模型和Key/Value的搜索模型 Key的搜索模型&#xff1a; 简单来说就是在一个搜索树&#xff0c;搜索树中的…

大桌子安装笔记

单位弄了个服务器&#xff0c;里面全是虚拟机&#xff0c;自己也学着建了一个测试用的虚拟机&#xff0c;不知道干点啥好&#xff0c;朋友说做个网盘吧&#xff0c;就用大桌子。 于是&#xff0c;干起来&#xff0c;不会配制&#xff0c;就跟朋友一步一步学起来。 他说&#…

服务熔断保护实践--Sentinal

目录 概述 环境说明 步骤 Sentinel服务端 Sentinel客户端 依赖 在客户端配置sentinel参数 测试 保护规则设置 设置资源名 设置默认的熔断规则 RestTemplate的流控规则 Feign的流控规则 概述 微服务有很多互相调用的服务&#xff0c;构成一系列的调用链路&#xf…

LangChain介绍及代码实践

一、简介 LangChian 作为一个大语言模型开发框架&#xff0c;是 LLM 应用架构的重要一环。那什么是 LLM 应用架构呢&#xff1f;其实就是指基于语言模型的应用程序设计和开发的架构。 LangChian 可以将 LLM 模型、向量数据库、交互层 Prompt、外部知识、外部工具整合到一起&a…

如何看待将本增效?

如何看待将本增效&#xff1f; 么是降本增效&#xff1f;就是公司里&#xff0c;增进收益的动作要多做&#xff0c;无效的动作要少做&#xff0c;甚至不做。什么叫有效&#xff1f;回到公司的经营目标上去&#xff0c;企业的管理就是目标管理。降本&#xff0c;需要卓越运营&a…

NLP学习笔记:使用 Python 进行NLTK

一、说明 本文和接下来的几篇文章将介绍 Python NLTK 库。NLTK — 自然语言工具包 — NLTK 是一个强大的开源库&#xff0c;用于 NLP 的研究和开发。它内置了 50 多个文本语料库和词汇资源。它支持文本标记化、词性标记、词干提取、词形还原、命名实体提取、分割、分类、语义推…