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来回快速的切换
posted @ 2021-07-19 16:39  剧终cur  阅读(59)  评论(0)    收藏  举报