Ubuntu网络编程——TCP/IP

2023-05-16

常识:
    裸机:没有安装操作系统的计算机。
    如果想在裸机上运行自己所编写的程序,就必须用机器语言写程序。

桌面操作系统:windows、macOS、Linux
服务器操作系统:Linux、Windows Server
嵌入式操作系统:Linux
移动设备操作系统:IOS、android(基于Linux)

虚拟机Virtual Machine:通过软件模拟的具有完整硬件功能的、运行在一个完全隔离的环境中的完整计算机系统。

Linux主要目录速查表
/:根目录,一般根目录只存放目录
/bin、/usr/bin:可执行二进制文件存放的目录,如常用的命令ls、tar、mv、cat等
/boot:放置linux系统启动时用到的一些文件,如linux的内核kernel文件:/boot/vmlinuz,
ip本身是个协议;ip地址:用来在网络中标记一台电脑,不允许重复。
windows查看ip:ipconfig;ubuntu查看ip:ifconfig
ip地址包括两部分:网络地址和ip地址。我们一般前面三个字节来表示网络地址,后面一个字节代表主机地址。
单播、多播、广播,单播向多个人传数据,多播向多个人传数据,广播向很多人传数据。
网络号在同一网段的不同主机号的电脑可以通信。
百度输入ip可以直接查看自己的外网ip。
网络通信三要素:协议、ip、port
端口port   dest_port   destination port
dest_ip   src_ip   src_port   
netstat -an  查看端口
80端口分配给http服务,万维网服务
21端口分配给ftp服务,文件传输服务
动态端口范围1024~65535,知名端口0——1023
连接之前可以ping一下ip
在一台电脑上可以通过pid唯一标识一个进程,但在网络中需要通过协议、ip、port来唯一标识一个进程。ip唯一标识网络中的主机,而传输层的协议、port可以唯一标识主机中的应用程序。
链路层----网络层----传输层----应用层
进程:运行的程序以及运行时用到的资源(环境)这个整体称之为进程,在讲解多任务编程时会讲到;进程间通信:运行的程序之间的数据共享。
API应用程序编程接口
**************************************
socket套接字:是进程间痛心的一种方式。它能够实现在不同主机之间进行通信。
python中使用socket模块中的socket函数来创建套接字。





tcp面向连接、可靠、基于数据流的通信协议
udp接收到的是数组,(b'djfsajf', ('127.0.0.1', 56504)),前面一个字节码要解码成字符串
套接字使用流程:
    udp_sendto:创建套接字;使用套接字发数据(转换为字节流);关闭套接字
        b"fhsakfdjsa"   str.encode("utf-8")
    udp_recvfrom:创建套接字;绑定ip/port(默认为本地ip"");接收数据,以元组的形式,前面的是字节流的,解码为字符串recv[0].decode("utf-8");关闭端口


str->bytes:encode编码
bytes->str:decode解码
str.encode()
bytes.decode()

 

demo01_udp发数据包.py

from socket import *
def main():
    # 创建套接字
    udp_socket_sendto=socket(AF_INET,SOCK_DGRAM)
    # 建立链接,udp无连接,
    #udp_socket_sendto.
    # 发送数据

    udp_socket_sendto.sendto(b"shuzk1 sendto shuzk2",("",7890))
    # 关闭套接字
    udp_socket_sendto.close()
if __name__=="__main__":
    main()

demo01_udp绑定端口接收数据.py

from socket import *
def main():
    # 创建套接字
    udp_socket_recvfrom=socket(AF_INET,SOCK_DGRAM)
    # 绑定端口,是绑定本台计算机的端口,故ip为本地ip,也可以不写
    udp_socket_recvfrom.bind(("",7890))
    # 接收数据
    recv=udp_socket_recvfrom.recvfrom(1024)
    print(recv)
    # 关闭套接字
    udp_socket_recvfrom.close()
if __name__=="__main__":
    main()

demo02_udp1_循环发送.py

from socket import *


def main():
    # 创建套接字
    udp_socket_sendto=socket(AF_INET,SOCK_DGRAM)
    # 建立链接,udp无连接,
    #udp_socket_sendto.
    # 发送数据,循环发送
    while True:
        send_data=input("请输入要发送的数据:")
        if "None"==send_data:
            break
        udp_socket_sendto.sendto(send_data.encode("utf-8"),("",7890))
    # 关闭套接字
    udp_socket_sendto.close()
if __name__=="__main__":
    main()

demo02_udp2_保持接受状态.py

from socket import *
def main():
    # 创建套接字
    udp_socket_recvfrom=socket(AF_INET,SOCK_DGRAM)
    # 绑定端口,是绑定本台计算机的端口,故ip为本地ip,也可以不写
    udp_socket_recvfrom.bind(("",7890))
    # 接收数据 循环接收
    while True:
        recv=udp_socket_recvfrom.recvfrom(1024)
        if "exit"==recv:
            break
        print("***********************")
        # 接受的是元组,前面的字符串要解码,根据传过来的编码格式
        # 进行解码
        print(recv[0].decode("utf-8"),"***",recv,"***",type(recv),"\n")
    # 关闭套接字
    udp_socket_recvfrom.close()
if __name__=="__main__":
    main()

demo03_udp_发送接收.py
 

from socket import *

def send_msg(udp_socket):
    msg_data=input("\n请输入要发送的数据:")
    msg_ip=input("\n请输入接收方的ip地址:")
    msg_port=input("\n请输入接收方应用程序的端口:")
    # 端口号是int型
    udp_socket.sendto(msg_data.encode("utf-8"),(msg_ip,int(msg_port)))
def recv_msg(udp_socket):
    recv_msg=udp_socket.recvfrom(1024)
    print(recv_msg[0].decode("utf-8"),"***",recv_msg[1])
    print(recv_msg)
def main():
    udp_socket=socket(AF_INET,SOCK_DGRAM)
    udp_socket.bind(("",7890))
    while True:
        option_num=input("请输入操作序号:")
        if "1"==option_num:
            send_msg(udp_socket)
        elif "2"==option_num:
            recv_msg(udp_socket)
        elif "exit"==option_num:
            break
        else:
            print("输入有误")

if __name__=="__main__":
    main()

*********************************************************************************************************
*********************************************************************************************************
*********************************************************************************************************

tcp

tcp协议,传输控制协议(Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议。
面向连接:因此TCP不适用与广播的应用程序,基于广播的应用程序请使用UDP协议。
可靠传输:tcp采用发送应答机制;超时重传;错误校验;流量控制和阻塞管理。

tcp流程:
    服务器socket()----bind()----listen()----accept()-----read()----write()----close()
    客户机socket()----connect()--------------------------write()----read()----close()

 

 

 

 

************************************************************************

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ubuntu网络编程——TCP/IP 的相关文章

  • 我的网页作品(div+css)

    前段时间为一个育儿网站做了一个个人空间主页 xff0c 这可是我的处女座 呵呵 请点击查看 xff1a Files shiyangxt baobaoke rar
  • 我用Visual Basic做的多模式计算器(应用小软件)!

    前一段时间参加了一个校内组织的IT实践大赛 xff0c 虽然当时没什么成熟的技术 xff0c 但是还是参加了 Visual Basic刚学也没多长时间 xff0c 于是就做了这个多模式计算器 xff0c 虽然技术含量不算高 xff0c 一些
  • C语言实现阶乘累加(1!+2!+3!+....+n!=?)

    最近要期末考试 xff0c 复习C语言 xff0c 见到一个看似很简单的问题 就是C语言实现阶乘累加 xff08 1 xff01 43 2 xff01 43 3 43 43 n 61 xff09 本来觉得这个肯定小意思 xff0c 但是修改
  • C++项目工程(包含opencv库以及项目的依赖库移植)编译成android可以使用的so库并在Android studio上调用so库进行使用(血泪操作总结)

    目录结构 概述预先准备编译操作so的函数导出并在android进行调用 概述 最近负责一个android项目需要使用到之前公司师兄编写的c 43 43 算法库 xff0c 一开始并不知道c 43 43 项目可以移植给android项目使用
  • C语言:用递归实现将输入的整数按逆序输出。如输入12345,则输出54321。

    这个程序是我对构造函数有个更深的认识 首先构造函数要先从头至尾走一边才会输出 xff0c 无论输出语句加的位置 xff08 循环内 xff0c 条件语句内 除外 xff09 然后构造函数递归可以把问题简单化 xff0c 本题如果按常规思路
  • Visual Basic函数大全!

    VB函数大全 Abs 函数 返回数的绝对值 And 运算符 执行两个表达式的逻辑连接 Array 函数 返回含一数组的 变体 Asc 函数 返回字符串首字母的 ANSI 字符代码 赋值运算符 61 给变量或属性赋值 Atn 函数 返回数的反
  • 数据结构与算法:哈夫曼树(源码)!

    这些天明白了一个道理 xff0c 搞技术也是需要激情的 也不知道为什么这段过的感觉特别的不爽 xff0c 也不知道是因为快要考试了 xff0c 心里没底 xff0c 而带来的恐惧 xff0c 还是 搞技术太久 xff0c 心里想放个假 xf
  • SSH超实用分页实现(原创开源)!

    SSH的分页网上有不少的例子 xff0c 有利用session的 xff0c 有利用分页组件的 我几个师兄原来搞的SSH项目也有一个成熟的分页插件 具体业务实现类中的分页方法 xff1a lt bgsound cep 61 34 0 34
  • 欢迎访问我的主博(http://shiyangxt.cnblogs.com)

    JavaEye的朋友 xff0c 大家好 我是一名大二的学生 xff0c 对编程技术怀有很大的热情 我的技术方向是Java xff0c 但是我的主博并不在这里 xff0c 而在博客园 xff0c 欢迎大家访问我的主博 施杨de编程世界 我渴
  • Linux应用编程---14.UDP服务器、客户端编程

    Linux应用编程 14 UDP服务器 客户端编程 之前有介绍过UDP是一种无连接 尽最大努力交付 面向报文的协议 应用层交给UDP多长的报文 xff0c UDP就照样发送 Linux下UDP属于数据报socket 数据报socket流程图
  • 0816网络编程day5

    include lt stdio h gt include lt sys types h gt include lt sys socket h gt include lt arpa inet h gt include lt netinet
  • STL容器特征

    STL中顺序容器类和关联容器类的主要特征如下 xff1a 1 vector 内部数据结构 xff1a 数组 随机访问每个元素 xff0c 所需要的时间为常量 在末尾增加或删除元素所需时间与元素数目无关 xff0c 在中间或开头增加或删除元素
  • 数据结构——不带头结点的单链表的基本操作

    数据结构 不带头节点的单链表的基本操作 结构体的创建 xff1a span class token keyword typedef span span class token keyword struct span SListNode sp
  • HTTP请求/响应报文结构

    HTTP请求 响应报文结构 HTTP请求报文 一个HTTP请求报文由四个部分组成 xff1a 请求行 请求头部 空行 请求数据 1 请求行 请求行由请求方法字段 URL字段和HTTP协议版本字段3个字段组成 xff0c 它们用空格分隔 比如
  • C语言练习笔记 ~结构体2 ~ 结构体在内存中的对齐说明

    文章目录 1 结构体变量在内存中的对齐说明例1 1个char型变量例2 2个char型变量例3 1个int型变量例4 1个char型变量和1个int型变量例5 3个char型变量和1个int型变量例6 5个char型变量和1个int型变量例
  • 思岚激光雷达+cartographer建图

    系统环境 xff1a Ubuntu18 04 ROS Melodic gcc 7 5 0 1 安装思岚ROS包 1 1 clone并编译 cd catkin ws src git clone https github com Slamtec
  • 使用PyTorch+functorch计算并可视化NTK矩阵

    2022年3月 xff0c PyTorch发布了PyTorch1 11和functorch functorch灵感来自于Google JAX xff0c 旨在提供vmap和autodiff转换配合PyTorch使用 本文将演示如何使用PyT
  • libcurl异步请求+http长连接池

    由于公司项目 xff0c 需要localhost的形式高并发的http访问本机服务 xff0c 所以面临了两方面的问题 xff1a 1 http短连接会造成大量的time wait xff0c 影响服务器的性能 2 libcurl easy
  • VC实现http发送get和post请求

    VC实现http发送get和post请求 get请求 首先通过前面介绍的抓包工具获取请求的详细内容 xff0c 然后再通过VC拼接Header xff0c 函数如下 xff1a bool CXXX http get eng mode lt
  • 链表(图文详解)

    链表的概念 链表是一种物理存储结构上非连续 xff0c 非顺序的存储结构 xff0c 数据元素的逻辑顺序是通过链表中的指针链接次序实现的 链表的结构是多式多样的 xff0c 当时通常用的也就是两种 xff1a 无头单向非循环列表 xff1a

随机推荐

  • PCB上能上锡的那层叫什么?

  • C++常用数学函数

    C 43 43 中有个头文件math h xff0c 它是数学函数库 一些数学计算的公式的具体实现是放在math h里 xff0c 为了方便大家使用 xff0c 特在此总结常用的一些函数 1 三角函数 double sin double d
  • LimeSDR实验教程(6) 发射GPS

    下载程序 xff1a git clone https github com osqzss gps sdr sim git 编译安装 xff1a cd gps sdr sim gcc gpssim c lm O3 o gps sdr sim
  • 如何理解引用作为函数的返回值?

    如何理解引用作为函数的返回值 xff1f 1 引用作为函数的返回值时 xff0c 必须在定义函数时在函数名前将 amp 2 用引用作函数的返回值的最大的好处是在内存中不产生返回值的副本 span class token comment 代码
  • 自制合成孔径雷达(2) SDR实现的对比(SDR实现测速雷达)

    我今天查了查资料 xff1a 技术干货 xff1a 用LimeSDR Mini制作一台软件定义多普勒雷达 搜狐汽车 搜狐网 查阅一些文献后 xff0c 笔者想探寻减少雷达系统所需的昂贵模拟前端部件数量的可能性 设计灵感来自于Gregory
  • 自制合成孔径雷达(3) doppler代码解读

    上一篇帖子 xff0c 看完了基于SDR的多普勒雷达 xff0c 就可以看看硬件雷达的多普勒测速的DSP代码了 先看一下这个图 xff1a 我们需要的多普勒频移的测量结果是从混频器 xff08 Multiply Conjugate xff0
  • 各类SDR的USB接口一致性测试

    最近用高带宽示波器测了好几个SDR产品的USB2接口一致性 由于探头数量只有1个 xff0c 所以不能测全所有的项目 但已经包含了最主要的USB眼图 xff08 信号质量 xff09 项目 测试场景 xff1a 待测件包含 xff1a 1
  • Portapack应用开发教程(十八)NavTex接收 D

    上回说到 xff0c 我现在已经做到用自己的gnuradio流图从音频信号做fsk解调 xff0c 得到方波 然后用c程序把方波转为二进制数 又用python把二进制数转为最终的字母 但是遗留问题是python解码 xff0c 起始位如果错
  • Portapack应用开发教程(十八)NavTex接收 E

    我现在已经成功把两部分解码的代码合并到一起 实现的功能是从stdout取出方波的采样点幅度 xff0c 然后把它转为解码输出 include lt stdio h gt include lt string gt include lt mat
  • 使用RTL-SDR和Matlab Simulink玩转软件无线电(二十一)

    3 13 扫描频谱 xff1a 把 25MHz 到 1 75GHz 的信号都收下来 这一节我们会做本章最后一个练习 xff0c 使用一个 RTL SDR 扫描整个频率范围内的信号 对于大多数 RTL SDR 设备来说 xff08 R820T
  • SDR# (SDRSharp)代码讲解 (一)

    SDR 也称SDRSharp 与Linux平台下常用的GQRX类似 xff0c 是目前Windows平台上最常用的频谱观察 xff0c 音频解调软件 xff0c 支持AM FM SSB等多种调制方式 以SDRSharp为基础又派生出了其它一
  • 自动跟随机器人教程(一)(树莓派、Arduino教程)

    机器人购买链接 xff1a https item taobao com item htm spm 61 a1z38n 10677092 0 0 59a21debCqLXYP amp id 61 532012951368 接下来打算发布一款自
  • 自动跟随机器人教程(二)硬件组装

    本机器人结构应该说比较简单 xff0c 除了上述图片里的4样东西外 xff0c 就是一个USB摄像头和一块航模专用12V锂电池 xff08 与电机电压一致 xff09 xff0c 一共6样东西 所有这些东西都不需要螺丝固定 xff0c 多数
  • LimeSDR 中文教程 (一)

    行业应用及合作请联系 j shao 64 limemicro com xff08 本文所有图片请参考Myriadrf官网原文 xff1a https myriadrf org blog limesdr made simple part 1
  • Linux系统——fork()函数详解(看这一篇就够了!!!)

    fork 函数详解 包看包会 xff01 xff01 xff01 1 fork 简介 函数原型 xff1a pid t fork void xff1b pid t为int类型 xff0c 进行了重载pid t getpid 获取当前进程的
  • HttpURLConnection详解、JSON的使用

    1 Http网络请求方法 Http的请求方法代表了客户端想对服务器进行的操作 xff0c 比如 xff1a POST GET HEAD PUT DELETE TRACE OPTIONS 常用的不过于CRUD四个 增 xff1a PUT 删
  • printf二进制输出

    include lt stdio h gt include lt conio h gt include lt stdlib h gt void main int i 61 31 char s 10 itoa i s 2 转换成字符串 xff
  • 秒懂HTTP之基本认证(Basic Authentication)

    版权申明 非商业目的注明出处可自由转载 博文地址 xff1a https blog csdn net ShuSheng0007 article details 89598299 出自 xff1a shusheng007 系列文章 xff1a
  • Linux内核学习(一)8086编程模型

    本文主要介绍Intel8086系列的编程模型 xff0c 包括分段与分页机制 任务切换过程以及中断处理系统 作为Linux内核学习曲线的起点 xff0c 本文的侧重点在于对于每个主题 xff0c 硬件上是如何实现的 xff0c 以及为软件
  • Ubuntu网络编程——TCP/IP

    常识 xff1a 裸机 xff1a 没有安装操作系统的计算机 如果想在裸机上运行自己所编写的程序 xff0c 就必须用机器语言写程序 桌面操作系统 xff1a windows macOS Linux 服务器操作系统 xff1a Linux