Я создал два сценария, которые устанавливают клиентский сокет и серверный сокет в localhost.Получение ошибки кодирования с использованием сокетов в Python
Сервер сокета
import socket
from time import ctime
HOST = ''
PORT = 21567
BUFSIZ = 1024
ADDR = (HOST,PORT)
tcpsersoc = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
tcpsersoc.bind(ADDR)
tcpsersoc.listen(5)
while True:
print('waiting for connection .... ')
print(ADDR)
tcpClisoc,addr = tcpsersoc.accept()
print('......connected from', addr)
while True:
data = tcpClisoc.recv(BUFSIZ)
if not data:
break
tcpClisoc.send('[%s]%s'%(bytes(ctime(),'UTF-8'),data))
tcpClisoc.close()
tcpsersoc.close()
Client гнездо
from socket import *
HOST= '127.0.0.1'
PORT = 21567
BUFSIZ = 1024
ADDR = (HOST,PORT)
tcpCliSock = socket(AF_INET,SOCK_STREAM)
tcpCliSock.connect(ADDR)
while True:
data = input('>')
if not data:
break
tcpCliSock.send(data.encode('utf-8'))
data = tcpCliSock.recv(BUFSIZ)
if not data:
break
print(data.decode('utf-8'))
tcpCliSock.close()
я все еще получаю ошибку ниже, несмотря на преобразование данных в объект байт. Я использую питон 3.x
это ошибка, поднятого сокет сервера
waiting for connection ....
('', 21567)
......connected from ('127.0.0.1', 52859)
Traceback (most recent call last):
File "<pyshell#9>", line 1, in <module>
import exampletcpserver
File "C:/Python34\exampletcpserver.py", line 23, in <module>
tcpClisoc.send('[%s]%s'%(bytes(ctime(),'UTF-8'),data))
TypeError: 'str' does not support the buffer interface
Пожалуйста, дайте мне знать, где я буду неправильно.
разве что именно то, что байты (CTIME(), 'UTF-8') делает? – Kannaj
№ 'bytes (ctime(), 'utf-8')' кодирует это байтам. Вставив это в операцию форматирования по строке ('"% s "% (..)'), вы снова сделаете из нее строку. – Phillip
ahhh :) спасибо. похоже, сейчас работает. Кажется, я получаю ответ от сервера. это приведенный ниже вывод, когда я печатаю «hi» ** [b 'Thu May 28 00:50:54 2015'] b'hi '** Я также использую декодирование неправильно? – Kannaj