快速了解——网络编程【Python】TCP开发流程(服务端,客户端)

一、概述

        网络编程 也叫 网络通信,Socket(套接字)编程,就是用来实现 网络互联的 不同计算机上 运行的程序间 数据交互(传输)的

二、三大要素

1、IP地址
  • 概述

        全称IPAddress,是设备在网络中的 唯一标识

  • 分类

        1、IpV4:采用4字节,十进制形式
        2、IpV6:采用16字节,十六进制形式

  •  相关操作

        1、win + R 打开DOC窗口,输入 cmd,回车
        2、ipconfig / all:windows 系统 查看本机 ip
        3、ifconfig:mac,linux系统 查看本机 ip
        4、测试网络连接:ping 域名  或者  ip地址 -t,-t 就是一直发,不写发4个包,ctrl + c 结束
        5、127.0.0.1  本地回环(回路)地址,代表本机;255.255.255.255 广播地址,类似群发

2、端口
  • 概述

        程序在设备上的 唯一标识,是传输数据的通道

  • 范围

        0~65535

(细节:0~1023是 知名端口号,已被系统占用,或用作保留端口,设定时尽量规避这个范围,1024~65535是 动态端口号)

3、协议
  • 概述

        通信规则,即通信双方 应该遵循 什么样的规则 进行传输

  • TCP协议

        全称Transmission Control Protocol,即 传输控制协议


        建立连接:3次握手

        1、客户端向服务端 发送请求,等待服务端确认。
        2、服务端 收到请求后,回复客户端以确认连接请求。
        3、客户端 收到确认后,再次发送请求确认服务端,服务端收到正确请求后,则连接建立成功

        断开连接:4次挥手

        1、当主机A(客户端 or 服务端)完成数据传输后, 提出停止TCP 连接的请求
        2、主机B收到请求后对其作出响应,确认这一方向上的TCP连接将关闭
        3、主机B端再提出反方向的连接关闭请求
        4、主机A对主机B 的请求进行确认,双方向的关闭结束

        特点

        1、面向连接(三次握手)
        2、安全(可靠)协议
        3、传输效率 相对较低
        4、采用 字节流 的方式发送数据,理论上无大小限制
        5、区分 客户端 和 服务器端

  • UDP协议

        1、面向无连接
        2、不安全(不可靠)协议
        3、传输效率 相对较高
        4、采用(数据报包)发送数据,每个包大小不超过64KB
        5、不区分 客户端 和 服务器端,是发送端 和 接收端


三、Socket套接字

  • 概念:进程之间通信的工具

        用法

        1、导入模块:import socket
        2、创建socket对象:socket . socket ( AddressFamily,Type)
                AddressFamily(地址族):internet进程间通信,用AF_INET
                Type(套接字类型):SOCK_STREAM流式套接字,用于TCP协议

# 1、导入模块
import socket    

# 2、创建服务器端 Socket对象
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

四、TCP开发流程

1、服务器端

bind(address):绑定地址( host,port )到socket套接字
listen(backlog):开始TCP监听,最大值可设置为128
accept( ):被动接受客户端连接,返回执行Socket,客户端IP地址

import socket    # 导包

# 1、创建服务器端 Socket对象
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 2、绑定 IP 和 端口号
server_socket.bind(('127.0.0.1', 6666))        # 细节:元组包裹

# 3、设置监听,一般设置为 5,最小为 1,上限为 128
server_socket.listen(5)
print('服务器端,开启监听...')

# 4、开始监听,等待客户端连接。有连接就返回:负责和客户端交互的 Socket,客户端的IP信息
accept_socket, client_info = server_socket.accept()

# 5、向客户端发送数据,注意:二进制形式
accept_socket.send(b'Welcome to study socket!')

# 6、接收客户端的回执信息
recv_data = accept_socket.recv(1024)        # 接受数量设置为1024

# 细节:把接收到的数据(二进制形式)转成字符串
recv_data_str = recv_data.decode(encoding='utf-8')
print(f'服务器端收到:{recv_data_str}')

# 7、释放资源
accept_socket.close()        # 细节!不要忘记释放资源
2、客户端

发送信息:端名.send()        # 注意传递的是二进制形式的信息 

接收信息:端名.resv(字符数)

连接服务器端:端名.connect(('服务器端IP',端口号))        # 用元组包裹

import socket

# 1、创建客户端 Socket对象
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 2、连接服务器端,指定:服务器端IP,端口号(用元组包裹)
client_socket.connect(('127.0.0.1', 6666))

# 3、接收服务器端发送的数据
recv_data = client_socket.recv(1024)

# 细节:把接收到的数据(二进制形式)转成字符串
recv_data_str = recv_data.decode(encoding='utf-8')
print(f'客户端收到:{recv_data_str}')

# 4、向服务器端发送回执信息
client_socket.send('消息收到!'.encode(encoding='utf-8'))

# 5、释放资源
client_socket.close()
3、类型转换

编码:encode(字符串 转 二进制形式)

解码:decode(二进制形式 转 字符串)

  • 8
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值