python sendall_Python 3套接字编程:使用sendall与send

作为我问题的背景,我是一名计算机专业的学生,第一次开始使用Python。在此之前,我主要使用Java,现在我对Java约定和实践非常熟悉。

背景

socket编程的一个赋值要求我们在机器的本地服务器和客户机之间发送字符串。我们提供了示例(Python 2)代码,用于实例化服务器和客户机。在赋值的上下文之外,我想创建一个同样在Python 3中运行的代码版本,但是我在让客户端在python3中同样工作时遇到了问题。

更改服务器和客户端

最初,服务器只需要稍作改动,我就可以让它正常工作了。我的服务器代码如下:#!/usr/bin/python3

import socket

HOST=''

PORT=5870

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

sock.bind((HOST, PORT))

sock.listen(1)

conn, addr = sock.accept()

print('Connected by ', addr)

conn.sendto("Welcome to the server!", (HOST, PORT))

while True:

data = conn.recv(1024)

if not data: break

conn.sendall(data)

conn.close()

我无法将客户端转换为在Python 3中运行和运行的代码。我试着深入研究这个问题,但其他在线资源对我没有帮助(至少在我的经验水平上)。我的服务器代码如下。#!/usr/bin/python3

import socket

HOST='127.0.0.1'

PORT=5870

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

sock.connect((HOST, PORT))

data = sock.recv(1024)

print('Server sent', data)

sock.sendto("Hello world".encode(), (HOST, PORT))

data = sock.recv(1024)

print("Server sent", data)

sock.sendto("This is the second message".encode(), (HOST, PORT))

data = sock.recv(1024)

print('Server sent ', data)

sock.close()

实际问题

最初,服务器和客户机的这段代码都使用sendall()而不是sendto(),但我在客户机中获得TypeError并读取this question后更改了它。我仍然不清楚为什么这样做或为什么我必须这样做(尽管我希望有一个解释)。

现在,当我运行客户机代码时,即使在使用sendto()时,我也会在服务器上获得相同的TypeError,但我不确定如何在Python 3中解决此问题。我收到的服务器stacktrace如下所示(我在客户端收到一个断管):$ python3 mail_server.py

Connected by ('127.0.0.1', 41866)

Traceback (most recent call last):

File "mail_server.py", line 14, in

conn.sendto("Welcome to the server!", (HOST, PORT))

TypeError: a bytes-like object is required, not 'str'

我做错了什么?我如何才能在Python3中使用它?背景背景关于为什么这是特别有帮助的,因为我认为我的问题的一部分是,我不明白为什么这个变化是必要的开始。谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值