net-编程

74 篇文章 2 订阅

网络编程

  • 七层模型:
  1. 物理层
  2. 数据链路层
  3. 网络层
  4. 传输层
  5. 会话层
  6. 表示层
  7. 应用层
  • 四层模型
  1. 链路层
  2. 网络层
  3. 传输层
  4. 应用层
  • 每一层都有相应的协议负责交换信息或者协同工作
  • tcp/ip 协议
  • ip地址:负责在网络上唯一定位的一个机器
  • 由四个数字段组成,每一个数字段的取值是0-255
  • 192.168.xxx.xxx:局域网ip
  • 127.0.0.1 本机
  • IPV4 IPV6
  • 端口
  1. 范围: 0-65535
  2. 知名端口:0-1023
  3. 非知名端口: 1024-

TCP/UDP协议

  • 区别:TCP是面向连接的通信协议,通过三次握手建立连接,通讯完成时要拆除连接,由于TCP是面向连接的所以只能用于端到端的通讯。
  • socket编程
  1. 套接字:是一个网络通信的端点,能实现不同主机的进程通信
  2. 通过IP端口定位对方并发送消息的通信机制
  3. 分为UDP和TCP,发起请求并接受请求
  4. 步骤:建立socket,绑定post和Ip,对方接受访问,返回反馈
  • UDP 编程
    • Server端流程
      1. 建立socket,socket是负责具体通信的一个实例
      2. 绑定,为创建的socket指派固定的端口和ip地址
      3. 接受对方发送内容
      4. 给对方发送反馈,此步骤为非必须步骤
    • Client端流程
      1. 建立通信的socket
      2. 发送内容到指定服务器
      3. 接受服务器给定的反馈内容

实验案例证明,这服务端和客户端共用同一个端口进行通信

  • 服务器程序要求永久运行,死循环,不死
  • TCP编程
    • Server端的编写流程
      1. 建立socket负责具体通信,这个socket其实只负责接受对方的请求,真正通信的是链接后从新建立的socket
      2. 绑定端口和地址
      3. 监听接入的访问socket
      4. 接受访问的socket,可以理解接受访问即建立了一个通讯的链接通路
      5. 接受对方的发送内容,利用接收到的socket接收内容
      6. 如果有必要,给对方发送反馈信息
      7. 关闭链接通路
    • Client端流程
      1. 建立通信socket
      2. 链接对方,请求跟对方建立通路
      3. 发送内容到对方服务器
      4. 接受对方的反馈
      5. 关闭链接通路

FTP编程

  • FTP(FileTransferProtocal)文件传输协议

  • 用途: 定制一些特殊的上传下载文件的服务

  • 用户分类: 登陆FTP服务器必须有一个账号

    • Real账户: 注册账户
    • Guest账户: 可能临时对某一类人的行为进行授权
    • Anonymous账户: 匿名账户,允许任何人
  • FTP工作流程

    1. 客户端链接远程主机上的FTP服务器
    2. 客户端输入用户名和密码(或者“anonymous”和电子邮件地址)
    3. 客户端和服务器进行各种文件传输和信息查询操作
    4. 客户端从远程FTP服务器退出,结束传输
  • FTP文件表示

    • 分三段表示FTP服务器上的文件
    • HOST: 主机地址,类似于 ftp.mozilla.org, 以ftp开头
    • DIR:目录, 表示文件所在本地的路径,例如 pub/android/focus/1.1-RC1/
    • File: 文件名称, 例如 Klar-1.1-RC1.apk
    • 如果想完整精确表示ftp上某一个文件,需要上述三部分组合在一起
import socket

# 服务端编程
def severFuc():
    sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)#AF_INET代表ipv4,SOCK_DGRAM代表使用UDP通信
    # 127.0.0.1
    addr = ("127.0.0.1",7855)
    sock.bind(addr)
    # 接受对方消息
    data , addr = sock.recvfrom(500)
    print(data)
    print(type(data))
    text = data.decode()
    print(text)
    # 给对方返回消息
    rsp = "hello"
    data = rsp.encode()
    sock.sendto(data,addr)

if __name__ == '__main__':
    print("消息传输开始")
    severFuc()
    print("消息传输结束")
import socket
# 客户端
def clientFunc():
    sock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
    text = "你好"
    data = text.encode()
    sock.sendto(data,("127.0.0.1",7855))
    data,addr = sock.recvfrom(200)
    data = data.decode()
    print(data)

if __name__ == '__main__':
    clientFunc()
import socket
import time
# 服务端编程
def severFuc():
    sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)#AF_INET代表ipv4,SOCK_DGRAM代表使用UDP通信
    # 127.0.0.1
    addr = ("127.0.0.1",7855)
    sock.bind(addr)
    # 接受对方消息
    data , addr = sock.recvfrom(500)
    print(data)
    print(type(data))
    text = data.decode()
    print(text)
    # 给对方返回消息
    rsp = "hello"
    data = rsp.encode()
    sock.sendto(data,addr)

if __name__ == '__main__':
    while 1:
        try:
            severFuc()
        except Exception as e:
            print(e)
        time.sleep(1.5)
import socket
def tcp_srv():
    # 建立通信
    sock =socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    addr = ("127.0.0.1", 8899)
    sock.bind(addr)
    sock.listen()
    # 监听接入访问的socket
    while True:
        #接受访问的元组第一个元素赋值给skt,建立一个通讯的链接通路
        skt,addr = sock.accept()#skt链接水管,可以理解为窗口打开
        #接受对方的发送内容,利用接收到的socket接收内容
        msg = skt.recv(500)
        msg = msg.decode()
        rst = "Received msg: {0} from {1}".format(msg, addr)
        print(rst)
        # 6. 如果有必要,给对方发送反馈信息
        skt.send(rst.encode())

        # 7. 关闭链接通路
        skt.close()


if __name__ == "__main__":
    print("Starting tcp server.......")
    tcp_srv()
    print("Ending tcp server.......")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值