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

本文介绍了Linux系统中的Socket网络编程基础,包括TCP和UDP协议的应用、C/S模型、协议本质及地址端口概念。通过实例展示了创建套接字、指定远程设备IP地址及数据收发的过程,帮助读者从零开始掌握网络编程。
摘要由CSDN通过智能技术生成

1、课程目标:以 Linux 系统为主要平台,从 0 掌握 socket 网络编程

  • 掌握网络协议的本质以及 socket 网络编程
  • 掌握网络编程基础模型,如:C / S
  • 掌握 TCP 和 UDP 应用编程
  • 不同平台网络编程实践

2、课程安排

  • socket 接口与 TCP 和 UDP 编程(数据收发)
  • 通信协议设计与实现

3、网络编程的本质:使用操作系统提供的接口函数,使得应用程序具备收发网络数据的能力
在这里插入图片描述

应用程序如何通过内核去使用硬件?通过系统自带的接口函数。

操作系统内核可以直接管理硬件,应用程序通过操作系统提供的接口函数(让内核去操作硬件)来进行数据的收发。

在这里插入图片描述

  • 网络编程核心概念
    — 协议:为进行数据通信而预定义的数据规则
    — 地址:网络通信中的用于标识设备的整数值 例:192.168.3.166           
    — 端口号:设备为收发数据而指定的数值,用于标识具体连接。可理解为:设备中用于数据通信的数据通道
  • 角色
    服务端:等待连接的设备
    客户端:发起连接的设备
       

在这里插入图片描述

GET /index.html HTTP/1.1
HOST: www.dt4sw.com
User-Agent: TEST
Connection: close



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

答:网址不是 IP 地址,是网络信息资源的地址(如:具体网页的地址):即URL(Uniform Resource Locator)

IP 地址(Internet Protocal Adress):网络设备的地址
域名是 IP 地址的别名,多个域名可指向同一个 IP 地址
  
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

1、创建套接字,为网络连接做准备

2、指定远程设备的IP地址

在这里插入图片描述

在这里插入图片描述

#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");		//将IP地址字符串转化成符合网络字节序的整型值
    addr.sin_port = htons(80);								//将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("len = %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 byte = %d\n", len);

    close(sock);

    return 0;
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值