Ubuntu网络编程——TCP/IP

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

桌面操作系统: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()

 

Ubuntu网络编程——TCP/IP_第1张图片

Ubuntu网络编程——TCP/IP_第2张图片

 

 

 

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

你可能感兴趣的:(python)