Ошибка отправки и получения модуля сокета - PullRequest
0 голосов
/ 08 декабря 2018
>>> client.send('hello')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: a bytes-like object is required, not 'str'
>>> client.send('hello').encode()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: a bytes-like object is required, not 'str'
>>> client.send('hello').encode('utf-8')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: a bytes-like object is required, not 'str'

клиент подключен и находится в режиме приема data=mysocket.recv(2048), я пытался кодировать строку, но, похоже, не работает, я также пытался отправить целочисленные значения, но получил ту же ошибку.это приемник

import socket
mysocket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
mysocket.connect(('192.168.*.**',4444))
data=mysocket.recv(2048)

мне пришлось ** Ip-адрес

import socket
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.bind(('192.168.*.**',4444))
s.listen(5)
(client,(ip,port))=s.accept()
client.send('hello world')

как я могу исправить?

1 Ответ

0 голосов
/ 08 декабря 2018

Мой предложенный код (не полностью протестирован):

#SERVER
import socket

with socket.socket(socket.AF_INET,socket.SOCK_STREAM) as s:
    s.bind(('192.168.*.**',4444))
    s.listen(0)
    conn, client_addr= s.accept()
    print('The client:', client_addr, s.gethostbyaddr(client_addr[0]),'\n')

    with conn:
        while True:
            data = conn.recv(1024)  
            print('received:',data)
            if not data: # 'data' will be empty '' if the client closed the connection.
                print("exit")
                break

            conn.sendall(b'Hello World!') 

#CLIENT
import socket

with socket.socket(SockParam.FAMILY, SockParam.TYPE) as mysocket:

    mysocket.connect(('192.168.*.**',4444))
    print("The connection is established.")    
    data=mysocket.recv(2048)

    for msg in ["python","stackoverflow"]:

        sock.sendall( bytes(msg,encoding="utf8") )
        ackn = sock.recv(1024)          # waiting for the server
        print("echoed:",ackn )

Например, вы можете отправить 4-байтовые целые числа с прямым порядком байтов:

sock.sendall( int.to_bytes(42,4,'big') )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...