网络编程 socket模块 tcp协议 udp协议

Posted hdy19951010

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网络编程 socket模块 tcp协议 udp协议相关的知识,希望对你有一定的参考价值。

网络基础相关知识 , socket模块 , tcp协议通信代码


网络基础相关知识
(1) 架构
C / S 架构: client 客户端 和 server 服务器端
优势:能充分发挥pc机的性能

B / S 架构: browser 浏览器 和 server 服务器 隶属于C/S架构
B /S 架构 同意了应用的接口

(2) 通信
同意台电脑上两个py程序通信 : 打开一个文件
两台电脑通信 : 联网
多个电脑通信 : 电脑1发送一个请求帧,其中包含(我的IP和我的mac地址,和我要找的IP地址为xxxxxxx的主机),将此请求发送给交换机,交换机广播这条消息给其他所有主机
,目标主机接到这条消息后回复给交换机消息(我的IP地址和mac地址,请回复给源主机(实际这里是IP和mac来代替源主机)),交换机以单播的形式返回给源主机


mac 地址 : 是一个物理地址,全球唯一,类似于身份证
ip 地址 : 是一个四位点分十进制,它标识了计算机在网络中的位置

交换机的通信方式:
广播 : 吼一嗓子,发送给每台计算机
单播 : 一对一
组播 : 一对多

arp 协议 : 通过目标 ip 地址获取目标 mac 地址的一个协议
端口 : 操作系统为本机上每一个运行的程序都随机分配一个端口,其他电脑上的程序可以通过端口获取到这个程序
ip 地址 + 端口 能找到唯一某台电脑上的某一个服务程序
路由器 : 连接不同网段 , 路由
网关 : 类似于一个局域网的出口和入口
网段 : 一个局域往内的ip地址范围
子网掩码 : 子网掩码 & ip地址 得到网段


osi 五层模型:
应用层 : http , https , ftp
传输层 : tcp/udp 四层交换机 , 四层路由器
网络层 : ip协议 路由器 , 三层交换机
数据链路层 : arp协议 交换机 , 网卡 , 网桥
物理层 : 传输电信号 集成器 , 网线 , 光纤



socket 模块
import socket
socket 又叫做套接字
sk = socket.socket(family = AF_INET,type = SOCK_STREAM)
family:
一种 : AF_UNIX 基于文件类型的套接字(早起socket是源自于unix系统而研发的一个功能,主要是为了同一台电脑上,多个程序直接通信)
一种 : AF_INET 基于网络类型的套接字

type :
一种是基于 TCP 协议 SOCK_STREAM
一种是基于 UDP 协议 SOCK_DGRAM
tcp 协议 : 可靠的,面向连接的,面向字节流形式的额传输方式
udp 协议 : 不可靠的,不面向连接的,面向数据报的传输方式,但是传输速度快



例(同一台电脑上,服务器与客户端相互通信)
代码:
同一台电脑两个py文件通信(下面两个py文件配合使用)
服务器需要一个py文件
# 服务器(代码):
import socket
sk=socket.socket()      #不传参数,默认使用基于网络类型的套接字,协议:TCP
sk.bind((192.168.12.30,18907))    #端口的范围是0-65535   但是 0-1023 这些别用
sk.listen()     #同时能接受的连接
while 1:
    conn,addr=sk.accept()     #等待接受客户端的连接  ,  阻塞等待
    while 1:
        print(输入q退出聊天)
        ms_r=conn.recv(10033333).decode(utf-8)    #接收 , 接收客户端传来的内容conn.recv(能接收的最大长度).decode(‘utf-8‘)接收过来解码成utf-8格式
        print(ms_r)
        if ms_r.upper()==Q:
            break
        i=input(>>>)
        conn.send(i.encode(utf-8))    #发送 , conn.send()发送  i.encode(‘utf-8‘)将要传输的内容编码成bytes类型进行传输
        if i.upper()==Q:
            break
    conn.close()
sk.close()

客户端也需要一个py文件

客户端(代码):

# 客户端(代码):
import socket
sk=socket.socket()
sk.connect((192.168.12.30,18907))     #连接到服务器
while 1:
    print(输入q退出)
    count=input(请输入内容)        #输入要发送的内容
    sk.send(count.encode(utf-8))      #发送
    if count.upper() == Q:
        break
    ma=sk.recv(10033333).decode(utf-8)    #接收 , 接收服务器传输的内容sk.recv(能接收到额最大长度) , decode(‘utf-8‘)解码
    if ma.upper()==Q:
        break
    print(ma)
sk.close()

 
































































以上是关于网络编程 socket模块 tcp协议 udp协议的主要内容,如果未能解决你的问题,请参考以下文章

网络编程- socket协议小结hmac的检验客户端合法性和socketserver模块

Python socket网络模块

python 2.7中有没有socketserver这个模块

网络编程—网络基础概览socket,TCP/UDP协议

Java网络编程Socket服务端和客户端

TCP/UDP协议理解三次握手四次挥手Socket