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

配套环境

vscode、gcc、ubuntu22.04

概念描述

  • 网络编程的本质

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

网络接口在代码层面是操作系统提供的函数

应用程序通过网络接口使用操作系统的联网能力

 

  • 网络编程核心概念

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

地址:网络通信中用语标识设备的整数值

端口号:设备为收发数据而指定的数值,用于标识具体连接,可理解为设备中用于网络通信的数据通道

角色:服务端--等待连接的设备

           客户端--主动发起连接的设备

  • 网络知识充电站

网址就是IP地址吗?URL是什么,域名又是什么?

  1. 网址不是IP地址,是网络信息资源的地址(PS: 具体网页的地址),即URL
  2. 域名是IP地址的别名,多个域名可以指向同一个IP地址

协议一定是看不懂的二进制数据吗?

  1. 协议是一种约定,即预先定义的规则
  2. 协议可以基于文本定义,也可以基于二进制定义

小端系统:采用小端模式(little-endian)的系统,即:数据低字节放在内存低地址中

大端系统:采用大端模式(big-endian)的系统,即:数据低字节放在内存高地址中

网络字节序:网络字节顺序采用大端模式,所以:在小端系统中需要做字节序转换

网络编程模式

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

 

实验代码

#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 /index.html HTTP/1.1\nHOST: www.dt4sw.com\nUser-Agent: TEST\nConnection: close\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.99.217.175");
    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;
}


喝水不忘挖井人: 更多内容请搜索狄泰软件学院(淘宝/B站)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Joyce_JTR

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值