socket笔记

version: python3

TCP

创建服务器

from socket import *
from time import ctime


# 设置HOST,PORT
HOST = ""
PORT = 20000
# 设置缓冲区大小
BUFSIZE = 1024
ADDR = (HOST, PORT)

# 创建服务端socket
tcpServerSock = socket(AF_INET, SOCK_STREAM)
# 绑定到ADDR上
tcpServerSock.bind(ADDR)
#监听, 最大监听数为5
tcpServerSock.listen(5)

while True:
    print("waiting for connection...")
    # 等待连接
    tcpClientSock, addr = tcpServerSock.accept()
    print("connected from: ", addr)
    # 设置了一个变量error用于区分exit退出
    error = False

    while True:
        # 获取客户端发送的数据
        data = tcpClientSock.recv(BUFSIZE)
        # 为空时退出循环
        if not data:
            break
        # 接收到exit字样时,退出循环
        if data.decode('utf-8').lower() == "exit":
            break
        # 接收到KeyboardInterrupt or EOFError 的错误信息时,退出循环并将error设为True,用于退出服务器
        if data == bytes('Program interrupted by user.', encoding="utf-8") or \
                data == bytes('Read beyond end of file.', encoding="utf-8"):
            error = True
            break
        # 发送数据到客户端
        tcpClientSock.send(bytes("[{} {}]".format(ctime(), data), encoding="utf-8"))
    # 断开客户端连接
    tcpClientSock.close()
    # 接收到KeyboardInterrupt or EoFError时退出服务器
    if error:
        break
# 关闭服务器
tcpServerSock.close()

创建客户端

from socket import *

HOST = "127.0.0.1"
PORT = 20000
BUFSIZE = 1024
ADDR = (HOST, PORT)

# 创建客户端socket
tcpClientSock = socket(AF_INET, SOCK_STREAM)
# 连接服务器
tcpClientSock.connect(ADDR)

while True:
    try:
        data = input(">")
    except KeyboardInterrupt or EOFError as e:
        data = e.__doc__
    # 输入为空时,跳出循环
    if not data:
        break
    tcpClientSock.send(bytes(data, encoding="utf-8"))
    data = tcpClientSock.recv(BUFSIZE)
    # 接收到数据为空时,跳出循环
    if not data:
        break
    print(data.decode('utf-8'))
tcpClientSock.close()

UDP

创建服务器

from socket import *
from time import ctime

HOST = ""
PORT = 30000
BUFSIZE = 1024
ADDR = (HOST, PORT)

udpServerSock = socket(AF_INET, SOCK_DGRAM)
udpServerSock.bind(ADDR)

while True:
    print("waiting for connection...")
    data, addr = udpServerSock.recvfrom(BUFSIZE)
    udpServerSock.sendto(bytes("[{}] {}".format(ctime(), data), encoding="utf-8"), addr)
    print("...received from and returned to: ", addr)

udpServerSock.close()

创建客户端

from socket import *

HOST = "127.0.0.1"
PORT = 30000
BUFSIZE = 1024
ADDR = (HOST, PORT)

udpClientSock = socket(AF_INET, SOCK_DGRAM)

while True:
    data = input(">")
    if not data:
        break
    udpClientSock.sendto(bytes(data, encoding="utf-8"), ADDR)
    data, ADDR = udpClientSock.recvfrom(BUFSIZE)
    if not data:
        break
    print(data.decode("utf-8"))
udpClientSock.close()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值