python网络编程基础

网络编程:通常来说就是基于网络通信的软件or程序

几个重要的概念:

1.IP:网络设备的唯一标识,用于在网络中找到要传输/接收数据的特定对象

2.端口(端口号):网络设备上运行着多个软件/程序,每个程序都有一个对应的端口,找到对应的的端口可以和对应的程序进行交互

流程:在网络中通过IP找到特定的网络设备,再通过特定的端口号找到特定的软件/程序,进行连接/网络通信

补充内容:

IP地址一共有4位,第1位,1~223,第234位,0~255

注意事项:

① IP地址分为两类 : IPv4和IPv6

② IPv4是目前使用的IP地址

③ IPv6是未来使用的IP地址

端口号扩展

① 知名端口号:范围从0到1023,这些端口号一般固定分配给一些服务(21端口:FTP(文件传输协议)服务,22端口:SSH(安全外壳协议,主要用于远程连接与文件传输),25端口:SMTP(简单邮件传输协议)服务,80端口:HTTP服务,443端口:HTTPS服务)

② 动态端口号:一般开发应用程序使用端口号称为动态端口号。

范围:从1024到65535,如果开发的程序没有设置端口号,操作系统会在动态端口号这个范围内随机生成一个给开发的应用程序使用。

注意:当运行一个程序默认会有一个端口号,当程序退出时,所占用的这个端口号就会被释放。(相关概念:端口复用/地址复用)

设置端口建议8000以后

TCP

TCP,Transmission Control Protocol,传输控制协议

流程:创建连接→传输数据→关闭连接

几个重要概念:

三次握手:客户端发出连接申请→服务器接收申请并返回确认信息→客户端接收确认信息并再次发送确认信息给服务器→服务器确认,正常建立连接(客户端主动,服务器被动)

1次握手: client发送请求(随机数x) 

2次握手: server回消息(x+1y),client确认x

3次握手:client回复消息(y+1),B确认y,建立连接

四次挥手:client向server发出请求,关闭client_to_server的TCP连接→server收到client的请求后关闭连接并返回响应→server向client发出请求,关闭server_to_client的TCP连接→client收到server的请求,确认关闭连接并返回响应

1次挥手: client发送请求( 随机数u) 

2次挥手: server回消息(U+1)client确认U;关闭client到server的连接

3次挥手: server发送消息(U+1w

4次挥手:client回复消息(U+1, w+1)server确认w;关闭server到client的连接

socket网络编程

socket,网络编程中用来通信的重要通信方式/介质,类比:双方知道对方的电话号码,需要有手机/电话(充当介质)才能正常进行通信

TCP_client流程:

1.创建socket实例

2.尝试连接服务器

3.发送信息

4.接收信息

5.重复3-4步骤

5.关闭socket

代码示例

import socket

client = socket.socket(fileno=None)#创建socke实例

"""
if fileno is None:
    if family == -1:
        family = AF_INET
    if type == -1:
        type = SOCK_STREAM
    if proto == -1:
        proto = 0
默认使用IPV4 和TCP传输协议
"""

client.connect(('127.0.0.1',7788))#尝试和服务器连接
while True:
    data = input("输入:")
    if not data or data=='exit':
        print("end")
        break
    client.send(data.encode())#传输信息
    recv_msg = client.recv(1024)#接收信息

    print(recv_msg.decode())

client.close()#关闭socket

TCP_server流程:
1.创建socke示例

2.设置bind(),包含(IP,port),告知访问的IP以及暴露端口

3.这是listen()限制队列个数,开始监听

4.准备accept()请求,(接收成功后)此处有两个返回值,(conn_socket,ip_port),拿到一个新的socket(和client成功连接的)以及client的ip和端口号

5.接收信息

6.发送信息

7.重复5-6步骤

8.关闭socket

代码示例:
 

import socket

if __name__ == "__main__":
    server_socket = socket.socket(fileno=None)
    #设置端口复用 允许频繁访问;场景:服务重启、开发调试
    server_socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
    server_socket.bind(('',7788))
    server_socket.listen(128)
    conn_socket, ip_port = server_socket.accept()  # 接收socket对象 以及对象的ip和端口
    print(type(conn_socket), ip_port)
    while True:

        recv_msg = conn_socket.recv(1024)
        if not recv_msg:
            print("end")
            break
        print(recv_msg.decode())
        data = input("shuru:")
        if not data:
            break
        conn_socket.send(data.encode())
    conn_socket.close()
    server_socket.close()

TCP_server多客户端代码示例(每一轮次中需要等待client主动断开连接):
 

# 导入模块
import socket

# 1、创建套接字对象
tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 2、绑定IP与端口
tcp_server_socket.bind(("", 8090))
# 3、设置监听
tcp_server_socket.listen(128)
# 4、等待客户端连接
while True:
    # 使用try...except捕获连接异常
    try:
        new_socket, ip_port = tcp_server_socket.accept()
        while True:
            try:
                # 5、接收客户端发送过来的消息
                recv_data = new_socket.recv(1024)

                recv_data = recv_data.decode('gbk')
                print(f'{ip_port}:{recv_data}')

                content = input('服务器端消息:').encode('gbk')
                new_socket.send(content)

            except ConnectionResetError:
                print(f'{ip_port}客户端连接已经断开')
                break
    except:
        print('出错,退出服务器监听')
        break

# 关闭套接字对象
tcp_server_socket.close()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值