【Linux网络编程】网络编程初体验

简介: 【Linux网络编程】网络编程初体验

前言

虚拟机类型:Ubuntu 20.04.1,代码编写:vs code

windows连接工具NetAssist:链接:https://pan.baidu.com/s/1e3dKPh7N5bo0dli84O_TuA?pwd=mndp

提取码:mndp

前提:会C语言

提示:以下是本篇文章正文内容,下面案例可供参考

目标与安排

为什么要学习网络编程:

实践必备技能

时代必备技能:

几乎所有的操作系统都支持网络功能

几乎所有的app都要联网才能工作

互联网时代->移动互联网时代->物联网时代…

课程目标:

掌握网络协议的本质和socket的本质

掌握C/S等模型

掌握TCP和UDP网络编程

Are You ready?

Let`s go!

网络编程核核心概念与模式

如何进行网络编程?

使用操作系统的接口函数,使得程序具备网络数据收发的能力

本质:

只是一系列的系统函数的花哨玩法

网络编程是特定领域的C语言程序设计

核心概念

协议:为数据通信而预定的规则

地址:用于表示设备的整数值

端口号:

设备的收发数据而指定的整数值,用于标识具体连接

角色:

客户端:发起连接的设备

服务端:等待连接的设备

网络编程模式:

1、准备网络连接
2、连接运程设备
3、收发数据
4、关闭连接

初探网络编程接口

int socket(int dimain,int type,int protocal);创建套接字,为网络连接做准备
int connect(int sock,struct sockaddr* addr,socklen_t len);连接远程设备
ssize_t send(int fd,const void *buf,size_t n,int flags);发送数据到远程设备
ssize_t recv(int fd,void *buf,size_t n,int flags);接受数据
int close(int fd);关闭连接,销毁套接字

客户端编程初体验

注:远端ip地址为:47.103.24.173(bilibili.com),端口号80

//头文件
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>

定义socket变量int sock = 0;

定义sockaddr_instruct sockaddr_in addr = {0};

定义发送的内容char * tosend = "Get\n\n";注意:发送的内容最后需要2次换行,服务端才会理你

定义接受缓冲区:char buf[128]={0};

以及接受发送,循环控制变量int len = 0;int r = 0;


创建socket并判断

  sock = socket(PF_INET, SOCK_STREAM, 0);
    if( sock == -1 )
    {
        printf("socket error\n");
        return -1;
    }

赋值sockaddr_in

addr.sin_family = AF_INET;//和socket创建的参数1一样
    addr.sin_addr.s_addr = inet_addr("47.103.24.173");//ip地址
    addr.sin_port = htons(80);//端口号

连接:

if( connect(sock, (struct sockaddr*)&addr, sizeof(addr)) == -1 )
    {
        printf("connect error\n");
        return -1;
    }

发送数据服务端

  len = send(sock, tosend, strlen(tosend), 0);
    printf("send bytes = %d\n", len);

接收服务端发来的源码

  do
    {
        int i = 0;
        r = recv(sock, buf, sizeof(buf), 0);
        if( r > 0 )
        {
            len += r;
        }
        for(i=0; i<r; i++)
        {
            printf("%c", buf[i]);
        }
    } while ( r > 0 );
  printf("\n");
    printf("recv bytes = %d\n", len);

最后不要忘记了close(sock);

此时,我们运行,屏幕上就有html的源代码显示

The End

完整代码的展示:

#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
int main()
{
    int sock = 0;
    struct sockaddr_in addr = {0};
    char* tosend = "Get\n\n";
    int len = 0;
    char buf[128] = {0};
    int r = 0;
    sock = socket(PF_INET, SOCK_STREAM, 0);
    if( sock == -1 )
    {
        printf("socket error\n");
        return -1;
    }
    addr.sin_family = AF_INET;
    addr.sin_addr.s_addr = inet_addr("47.103.24.173");
    addr.sin_port = htons(80);
    if( connect(sock, (struct sockaddr*)&addr, sizeof(addr)) == -1 )
    {
        printf("connect error\n");
        return -1;
    }
    printf("connect success\n");
    len = send(sock, tosend, strlen(tosend), 0);
    printf("send bytes = %d\n", len);
    len = 0;
    do
    {
        int i = 0;
        r = recv(sock, buf, sizeof(buf), 0);
        if( r > 0 )
        {
            len += r;
        }
        for(i=0; i<r; i++)
        {
            printf("%c", buf[i]);
        }
    } while ( r > 0 );
    printf("\n");
    printf("recv bytes = %d\n", len);
    close(sock);
    return 0;
}
相关文章
|
9月前
|
安全 Linux 网络安全
Nipper 3.9.0 for Windows & Linux - 网络设备漏洞评估
Nipper 3.9.0 for Windows & Linux - 网络设备漏洞评估
240 0
Nipper 3.9.0 for Windows & Linux - 网络设备漏洞评估
|
10月前
|
运维 Linux 开发者
Linux系统中使用Python的ping3库进行网络连通性测试
以上步骤展示了如何利用 Python 的 `ping3` 库来检测网络连通性,并且提供了基本错误处理方法以确保程序能够优雅地处理各种意外情形。通过简洁明快、易读易懂、实操性强等特点使得该方法非常适合开发者或系统管理员快速集成至自动化工具链之内进行日常运维任务之需求满足。
654 18
|
10月前
|
网络协议 关系型数据库 Linux
【App Service Linux】在Linux App Service中安装 tcpdump 并抓取网络包
在App Service for Linux环境中,无法像Windows一样直接使用网络排查工具抓包。本文介绍了如何通过TCPDUMP在Linux环境下抓取网络包,包括SSH进入容器、安装tcpdump、执行抓包命令及下载分析文件的完整操作步骤。
483 5
|
11月前
|
Web App开发 网络协议 Linux
【Linux】网络基础
TCP/IP五层模型是网络通信的基础框架,将复杂的数据传输过程分为物理层、数据链路层、网络层、传输层和应用层,每层各司其职,协同完成远程通信。该模型确保了不同设备和网络之间的互联互通,是现代互联网运行的核心机制。
1242 5
|
安全 网络协议 Linux
Linux网络应用层协议展示:HTTP与HTTPS
此外,必须注意,从HTTP迁移到HTTPS是一项重要且必要的任务,因为这不仅关乎用户信息的安全,也有利于你的网站评级和粉丝的信心。在网络世界中,信息的安全就是一切,选择HTTPS,让您的网站更加安全,使您的用户满意,也使您感到满意。
382 19
|
11月前
|
网络协议 Linux 开发者
深入Linux中UDP网络通信机制编程探索
以上步骤概述了Linux中UDP网络通信的编程机制。在实现时,因关注细节和上下文环境可能有所调整,但大致流程是一致的。这些知识片段旨在帮助开发者快速上手Linux下的UDP编程,并提供可靠的信息作为编程的基础。在编程实践中,应结合实际业务需求,设计合适的数据传输协议,确保数据的正确性和实时性。
238 0
|
Linux 数据安全/隐私保护
使用Linux命令行接入无线网络Wi-Fi的示例。
现在,你已经使用命令行成功地连接到 Wi-Fi 网络了。这两个示例涵盖了用 `nmcli` 和 `wpa_supplicant` 连接无线网络的常见场景,让你能够不依赖图形化界面来完成这个任务。在日常使用中熟练掌握这些基本操作能增强你对 Linux 系统的理解,帮助你更有效地处理各种问题。
1050 12
|
SQL 安全 网络安全
网络安全与信息安全:知识分享####
【10月更文挑战第21天】 随着数字化时代的快速发展,网络安全和信息安全已成为个人和企业不可忽视的关键问题。本文将探讨网络安全漏洞、加密技术以及安全意识的重要性,并提供一些实用的建议,帮助读者提高自身的网络安全防护能力。 ####
477 17
|
SQL 安全 网络安全
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
随着互联网的普及,网络安全问题日益突出。本文将从网络安全漏洞、加密技术和安全意识三个方面进行探讨,旨在提高读者对网络安全的认识和防范能力。通过分析常见的网络安全漏洞,介绍加密技术的基本原理和应用,以及强调安全意识的重要性,帮助读者更好地保护自己的网络信息安全。
365 10
|
存储 SQL 安全
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
随着互联网的普及,网络安全问题日益突出。本文将介绍网络安全的重要性,分析常见的网络安全漏洞及其危害,探讨加密技术在保障网络安全中的作用,并强调提高安全意识的必要性。通过本文的学习,读者将了解网络安全的基本概念和应对策略,提升个人和组织的网络安全防护能力。