【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;
}
相关文章
|
4天前
|
监控 安全 Linux
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景,包括 ping(测试连通性)、traceroute(跟踪路由路径)、netstat(显示网络连接信息)、nmap(网络扫描)、ifconfig 和 ip(网络接口配置)。掌握这些命令有助于高效诊断和解决网络问题,保障网络稳定运行。
16 2
|
29天前
|
移动开发 网络协议 NoSQL
不为人知的网络编程(十七):冰山之下,一次网络请求背后的技术秘密
本文将抛弃千篇一律的计网知识理论,从现实的互联网技术实践角度,一步步为你分享一次网络请求背后的技术秘密。
47 0
|
22天前
|
运维 监控 网络协议
|
25天前
|
Ubuntu Linux 虚拟化
Linux虚拟机网络配置
【10月更文挑战第25天】在 Linux 虚拟机中,网络配置是实现虚拟机与外部网络通信的关键步骤。本文介绍了四种常见的网络配置方式:桥接模式、NAT 模式、仅主机模式和自定义网络模式,每种模式都详细说明了其原理和配置步骤。通过这些配置,用户可以根据实际需求选择合适的网络模式,确保虚拟机能够顺利地进行网络通信。
|
1月前
|
网络协议 安全 Ubuntu
Linux中网络连接问题
【10月更文挑战第3天】
32 1
|
1月前
|
监控 Linux 测试技术
Linux系统命令与网络,磁盘和日志监控总结
Linux系统命令与网络,磁盘和日志监控总结
55 0
|
1月前
|
监控 Linux 测试技术
Linux系统命令与网络,磁盘和日志监控三
Linux系统命令与网络,磁盘和日志监控三
38 0
|
网络协议 Linux C语言
linux下CC++网络编程基本:socket实现tcp和udp的例子
linux下CC++网络编程基本:socket实现tcp和udp的例子
235 0
|
6月前
|
存储 网络协议 算法
【探索Linux】P.28(网络编程套接字 —— 简单的UDP网络程序模拟实现)
【探索Linux】P.28(网络编程套接字 —— 简单的UDP网络程序模拟实现)
56 0
|
6月前
|
网络协议 算法 Linux
【探索Linux】P.27(网络编程套接字 —— UDP协议介绍 | TCP协议介绍 | UDP 和 TCP 的异同)
【探索Linux】P.27(网络编程套接字 —— UDP协议介绍 | TCP协议介绍 | UDP 和 TCP 的异同)
66 0