【Linux网络编程】网络编程初体验
创始人
2024-03-15 12:33:09
0

文章目录

  • 前言
  • 目标与安排
  • 网络编程核心概念与模式
    • 核心概念
    • 初探网络编程接口
  • 客户端编程初体验
  • The End


前言

虚拟机类型: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 
#include 
#include 
#include 
#include 
#include 
#include 

定义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; iprintf("%c", buf[i]);}} while ( r > 0 );printf("\n");printf("recv bytes = %d\n", len);

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

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

The End

完整代码的展示:

#include 
#include 
#include 
#include 
#include 
#include 
#include 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; iprintf("%c", buf[i]);}} while ( r > 0 );printf("\n");printf("recv bytes = %d\n", len);close(sock);return 0;
}

相关内容

热门资讯

汽车油箱结构是什么(汽车油箱结... 本篇文章极速百科给大家谈谈汽车油箱结构是什么,以及汽车油箱结构原理图解对应的知识点,希望对各位有所帮...
美国2年期国债收益率上涨15个... 原标题:美国2年期国债收益率上涨15个基点 美国2年期国债收益率上涨15个基...
嵌入式 ADC使用手册完整版 ... 嵌入式 ADC使用手册完整版 (188977万字)💜&#...
重大消息战皇大厅开挂是真的吗... 您好:战皇大厅这款游戏可以开挂,确实是有挂的,需要了解加客服微信【8435338】很多玩家在这款游戏...
盘点十款牵手跑胡子为什么一直... 您好:牵手跑胡子这款游戏可以开挂,确实是有挂的,需要了解加客服微信【8435338】很多玩家在这款游...
senator香烟多少一盒(s... 今天给各位分享senator香烟多少一盒的知识,其中也会对sevebstars香烟进行解释,如果能碰...
终于懂了新荣耀斗牛真的有挂吗... 您好:新荣耀斗牛这款游戏可以开挂,确实是有挂的,需要了解加客服微信8435338】很多玩家在这款游戏...
盘点十款明星麻将到底有没有挂... 您好:明星麻将这款游戏可以开挂,确实是有挂的,需要了解加客服微信【5848499】很多玩家在这款游戏...
总结文章“新道游棋牌有透视挂吗... 您好:新道游棋牌这款游戏可以开挂,确实是有挂的,需要了解加客服微信【7682267】很多玩家在这款游...
终于懂了手机麻将到底有没有挂... 您好:手机麻将这款游戏可以开挂,确实是有挂的,需要了解加客服微信【8435338】很多玩家在这款游戏...