Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

The following is the code that tries to modify the input supplied by a user by using sockets:

from socket import *  serverName = '127.0.0.1' serverPort = 12000 clientSocket = socket(AF_INET, SOCK_DGRAM) message = input('Input lowercase sentence:') clientSocket.sendto(message,(serverName, serverPort)) modifiedMessage, serverAddress = clientSocket.recvfrom(2048) print (modifiedMessage) clientSocket.close() 

When I execute it and supply input the following error occurs:

Input lowercase sentence:fdsgfdf Traceback (most recent call last):   File "C:\srinath files\NETWORKS\UDPclient.py", line 6, in <module>     clientSocket.sendto(message,(serverName, serverPort)) TypeError: a bytes-like object is required, not 'str' 

What can I do to solve this?

like image 559
sri Avatar asked Oct 07 '15 22:10

sri


People also ask

How do you fix Typeerror a bytes-like object is required not str?

Binary files are considered a series of bytes data and not as a string. It means that all data read from the file is returned as bytes objects, not str. We can solve this error by opening the file in read-only mode instead of binary mode, as shown below.

What is a byte like object?

Bytes-like objects are objects that are stored using the bytes data type. Bytes-like objects are not strings and so they cannot be manipulated like a string.

How do you define a byte like object in Python?

Bytes-like object in python In Python, a string object is a series of characters that make a string. In the same manner, a byte object is a sequence of bits/bytes that represent data. Strings are human-readable while bytes are computer-readable. Data is converted into byte form before it is stored on a computer.

How do you encode a byte in Python?

We can use the built-in Bytes class in Python to convert a string to bytes: simply pass the string as the first input of the constructor of the Bytes class and then pass the encoding as the second argument. Printing the object shows a user-friendly textual representation, but the data contained in it is​ in bytes.


1 Answers

This code is good for Python 2. But in Python 3, results in bit encoding error. I was trying to make a simple TCP server and encountered the same problem. Encoding solves this. Try this with sendto command.

clientSocket.sendto(message.encode(),(serverName, serverPort)) 

Similarly you should use .decode() to receive the data on the UDP server side, if you want to print it exactly as it was sent.

like image 89
Umair47 Avatar answered Sep 21 '22 20:09

Umair47