socket套接字

socket套接字

基于tcp+链接循环+通信循环的socket套接字实现

服务端.py



import socket
​
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  # 第一个参数是family这个代表的是套接字家族
# 第二个参数是type代表的是tcp协议
server.bind(('127.0.0.1', 8080))         # 服务端绑定端口和ip
server.listen(5)                         # 半连接池
​
while True:
    conn, addr = server.accept()         # 链接循环,建立连接
    print(f'{addr}链接建立成功')
    while True:                          # 通信循环
        try: # 捕捉异常
            data = conn.recv(1024)       # 收数据,1024字节
            if len(data) == 0:           # 如果收到的数据为空,就结束通信循环
                break
            print(f"从客户端接收到的数据:  {data.decode('utf-8')}")
            msg = input('>>>').strip()
            conn.send(msg.encode('utf-8')) # 发送数据
        except Exception as e:
            print(e)
            break
    conn.close()
​
server.close()

客户端.py

import socket
​
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect(('127.0.0.1', 8080))   # 客户端建立与服务端的通信
while True:   # 通信循环
    msg = input('(q to quit)>>>').strip()
    if msg == 'q':
        break
    if len(msg) == 0:continue
    client.send(msg.encode('utf-8')) # 发送数据
    data = client.recv(1024)         # 接受数据
    print(f"接受服务端发送的数据:  {data.decode('utf-8')}")
client.close()

套接字函数

服务端套接字函数
"""
s.bind()    绑定(主机,端口号)到套接字
s.listen()  开始TCP监听
s.accept()  被动接受TCP客户的连接,(阻塞式)等待连接的到来
"""
客户端套接字函数
"""
s.connect()     主动初始化TCP服务器连接
s.connect_ex()  connect()函数的扩展版本,出错时返回出错码,而不是抛出异常
"""
公共用途的套接字函数
"""
s.recv()            接收TCP数据
s.send()            发送TCP数据(send在待发送数据量大于己端缓存区剩余空间时,数据丢失,不会发完)
s.sendall()         发送完整的TCP数据
                    (本质就是循环调用send,sendall在待发送数据量大于己端缓存区剩余空间时,数据不丢失,循环调用send直到发完)
s.recvfrom()        接收UDP数据
s.sendto()          发送UDP数据
s.getpeername()     连接到当前套接字的远端的地址
s.getsockname()     当前套接字的地址
s.getsockopt()      返回指定套接字的参数
s.setsockopt()      设置指定套接字的参数
s.close()           关闭套接字
"""

基于udp协议

服务端.py

import socket
​
server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
server.bind(('127.0.0.1', 8080))
while True:
    data, addr = server.recvfrom(1024)
    server.sendto(data.upper(), addr)
    print(addr)
server.close()
客户端.py

import socket
client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
​
while True:
    msg = input('>>>').strip()
    if not msg:continue
    client.sendto(msg.encode('utf-8'), ('127.0.0.1', 8080))
    data, addr = client.recvfrom(1024)
    print(data)

常用端口

21/tcp FTP 文件传输协议
​
22/tcp SSH 安全登录、文件传送(SCP)和端口重定向
​
23/tcp Telnet 不安全的文本传送
​
25/tcp SMTP Simple Mail Transfer Protocol (E-mail)
​
69/udp TFTP Trivial File Transfer Protocol
​
79/tcp finger Finger
​
80/tcp HTTP 超文本传送协议 (WWW)
​
88/tcp Kerberos Authenticating agent
​
110/tcp POP3 Post Office Protocol (E-mail)
​
113/tcp ident old identification server system
​
119/tcp NNTP used for usenet newsgroups
​
220/tcp IMAP3
​
443/tcp HTTPS used for securely transferring web pages

进程概念

系统进行资源分配和调度的基本单位
进程是线程的容器,一个程序的运行,必须要有一个进程,进程里面必须要有一个线程
进程是正在运行的程序实例,进程是动态的,程序是死的
操作系统的基本执行单元
动态产生,动态消亡,独立运行的基本单位,进程有一定的生命周期
同一个程序执行两次,就会在操作系统中出现两个进程
进程是暂时的,进程是一个程序执行的过程
​
"""
进程不是干活的,干活的是进程里面的线程, 线程是操作系统执行的最小单位
"""
协程:
"""
用来解决单核下的并发,给程序员用的
"""
​
进程的调度算法:
"""
先来先服务调度算法
短作业优先调度算法
时间片轮转法+多级反馈队列
"""
进程的三种状态:
"""
就绪态:装备运行
运行态:正在运行
阻塞态:io阻塞
"""
同步
​
'''
所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不会返回。按照这个定义,其实绝大多数函数都是同步调用。但是一般而言,我们在说同步、异步的时候,特指那些需要其他部件协作或者需要一定时间完成的任务。
'''
异步
'''
异步的概念和同步相对。当一个异步功能调用发出后,调用者不能立刻得到结果。当该异步功能完成后,通过状态、通知或回调来通知调用者。如果异步功能用状态来通知,那么调用者就需要每隔一定时间检查一次,效率就很低。如果是使用通知的方式,效率则很高,因为异步功能几乎不需要做额外的操作。至于回调函数,其实和通知没太多区别。
'''
​
​
io密集型
input/output  输入输出
io阻塞
就是在输入或者输出状态
计算密集型
cpu处理,cpu来回快速的切换

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值