python socket小结

Python socket 简单编程小结

首先创建服务器端的socket

#socket server
import socket

#定义变量
HOST ="localhost"
PORT =     #是数字类型,不是字符串类型
BUFSIZE =    #一次接收字节数多少个bytes
ADDR = (HOST,PORT)  #之所以组成元组,是因为bind()函数需要一个包含两个参数的元组。
#创建套接字
tcpSerSock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

#绑定在本机特定端口,等待客户端的访问,客户端要访问的端口要和服务器绑定的端口号要一样
tcpSerSock.bind(ADDR)
#坐在端口号上开始监听来自客户端的连接请求
tcpSerSock.listen(5) #监听的客户端的数量

while True:
    #如果有客户端的connect()连接,向服务器发送套接字对象,客户端地址。
    #服务器端被动接收
    tcpClisock,addr = tcpSerSock.accept()
    print("connected from",addr)
    
    data =tcpClisock.recv(BUFSIZE)
    while True:
        if not data:
            print('no data from client') #如果tcpClisock关闭,则报异常
            break
        print(data.decode()) ## 需要对bytes类型进行转化为str类型,才能输出,使用解码操作
        tcpClisock.send(data)
                
        tcpClisock.close()
tcpSerSock.close()

客户端:

#客户端
from socket import *

HOST ='172.22.160.1'
PORT = 51567
BUFSIZE = 1024
ADDR = (HOST,PORT)

tcpCliSock = socket(AF_INET,SOCK_STREAM)
tcpCliSock.connect(ADDR)

while True:
    data = input('>')
    if not data:
        break
    #将str通过编码转换为bytes类型    
    tcpCliSock.send(data.encode()) 
     
    # 将接收到的bytes类型数据data解码为str类型数据
    data = tcpCliSock.recv(BUFSIZE).decode('utf-8')
    if not data:
        break
    print(data)
tcpCliSock.close()

编程中出现的问题:

  1. 本机实验时候,客户端连接到服务器的地址,可能会报错,提示“[WinError 10061] 由于目标计算机积极拒绝,无法连接。”
    解决方法:
import socket
hostname1 = socket.gethostname() #查看本机名
socket.gethostbyname("hostname1") #获得本机IP地址,客户端HOST中添入本地址即可。
  1. 字符串的数据类型转化问题,python3中默认socket传输的是bytes数据类型,所以在传输和显示时,要转换类型,例如:
#传输的时候需要数据是bytes类型,要将字符串类型编码为bytes类型,使用encode()
 data = input('>') # data 是接收输入的字符串类型
    if not data:
        break
    tcpCliSock.send(data.encode()) #将str通过编码转换为bytes类型,然后send给对方。

#在输出显示的时候需要将bytes类型数据转化为字符串类型编码,使用decode()解码。
data = tcpCliSock.recv(BUFSIZE).decode('utf-8')
    print(data)
  1. "[WinError 10038] 在一个非套接字上尝试了一个操作。"问题。
    原因:关闭了socket对象,在接收时会报错。
    解决方案:将socket对象的关闭操作写在循环的外部。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值