Python新手遇到TCP客户端问题

Python新手遇到TCP客户端问题,python,tcp,byte,typeerror,Python,Tcp,Byte,Typeerror,基本上,我只是从python网络和python开始,我不能让我的TCP客户端发送数据。它说: Traceback (most recent call last): File "script.py", line 14, in <module> client.send(data) #this is where I get the error TypeError: a bytes-like object is required, not 'str' 提前谢谢你的帮助 如果您使

基本上,我只是从python网络和python开始,我不能让我的TCP客户端发送数据。它说:

Traceback (most recent call last):
  File "script.py", line 14, in <module>
    client.send(data) #this is where I get the error
TypeError: a bytes-like object is required, not 'str'

提前谢谢你的帮助

如果您使用的是python2.x,那么您的代码是正确的。正如python2的文档中所示,它接受一个字符串参数。但是如果您使用的是python3.x,您可以看到它使用了bytes参数。因此,您必须使用将字符串
数据
转换为字节。因此,您的代码可能看起来像这样

import socket

target_host = "www.google.com"
target_port = 80 

#create socket object
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

#connect the client
client.connect((target_host,target_port))

#send some data
data = "GET / HTTP/1.1\r\nHost: google.com\r\n\r\n"
client.send(data.encode('utf-8'))

#receive some data
response = client.recv(4096)

print(response)

您可能正在使用Python3.X。应为字节类型参数,但
数据
为unicode字符串。必须使用方法对字符串进行编码。同样,您将使用以下方法接收数据:

import socket

target_host = "www.google.com"
target_port = 80

client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect((target_host,target_port))

data = "GET / HTTP/1.1\r\nHost: google.com\r\n\r\n"
client.send(data.encode('utf-8'))

response = client.recv(4096).decode('utf-8')

print(response)

因此,我按照一些人的建议,用utf-8编码数据,并重新编写代码,修复了奇怪的语法错误。现在我的代码工作得很好。感谢所有发帖子的人,尤其是@FJSevilla。工作守则如下:

import socket

target_host = "www.google.com"
target_port = 80

client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect((target_host,target_port))

data = "GET / HTTP/1.1\r\nHost: google.com\r\n\r\n"
client.send(data.encode('utf-8'))

response = client.recv(4096).decode('utf-8')

print(response)

使用Python 3.7的另一个建议是在消息中添加字母“b”。例如:

s.send(b"GET / HTTP/1.1\r\nHost: google.com\r\n\r\n")

您得到的回溯是什么?4096不是字符串您使用的是python3.x使用python2.x,它会起作用您也可以使用
client.send(data.encode('utf-8'))
而不是
client.send(data)
谢谢大家我非常感谢你们的帮助。谢谢。您修复了我的编码错误,但接收代码现在给我一个语法错误。我不清楚错误在哪里,我的代码与您的代码相同。@tjwilkins我在Python 3.5.2和Python 2.7.12中测试了我的代码及其运行,没有出现错误。复制并粘贴我所有的代码,然后尝试,我不能复制你的错误。我会被诅咒的,你的工作。也许我在混合空格和缩进时有错误,但我不这么认为。我将从头重写我的代码。感谢您的帮助。我使用了您建议的代码,它可以正常工作,但现在我在receive code.data=“get/HTTP/1.1\r\n host:google.com\r\n\r\n”client.send(data.encode(('utf-8'))中遇到语法错误#
s.send(b"GET / HTTP/1.1\r\nHost: google.com\r\n\r\n")
import socket

t_host = "www.google.com"
t_port = 80

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

s.connect((t_host, t_port))

s.send(b"GET / HTTP/1.1\r\nHost: google.com\r\n\r\n")

response = s.recv(4096)

print(response)