使用Python中的套接字获取编码错误

时间:2015-05-27 19:09:29

标签: python sockets

我创建了两个在localhost中建立客户端套接字和服务器套接字的脚本。

服务器套接字

------Tables------

CREATE TABLE IF NOT EXISTS `gelir` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `tarih` date NOT NULL,
  `uye` int(11) NOT NULL,
  `tutar` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
CREATE TABLE IF NOT EXISTS `uyeler` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `ad` varchar(15) NOT NULL,
  `soyad` varchar(15) NOT NULL,
  `tc` varchar(11) NOT NULL,
  `dogum` date NOT NULL,
  `cep` int(11) NOT NULL,
  `eposta` varchar(50) NOT NULL,
  `is` int(11) NOT NULL,
  `daire` int(11) NOT NULL,
  `kan` varchar(5) NOT NULL,
  `web` varchar(12) NOT NULL,
  `webpw` varchar(100) NOT NULL,
  `tur` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
CREATE TABLE IF NOT EXISTS `uye_gider` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `uye` int(11) NOT NULL,
  `tutar` float NOT NULL,
  `gider` int(11) NOT NULL,
  `aciklama` text COLLATE utf8_bin,
  PRIMARY KEY (`id`)

) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=1 ;
---End Tables---

客户端套接字

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()

尽管将数据转换为字节对象,我仍然会收到以下错误。我正在使用python 3.x

这是服务器套接字引发的错误

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()

请让我知道我哪里出错了。

1 个答案:

答案 0 :(得分:1)

您正在尝试发送字符串,但套接字要求您发送字节。使用

tcpClisoc.send(('[%s]%s' % (ctime(), data.decode("UTF-8"))).encode("UTF-8"))

Python 3.5将支持替代

tcpClisoc.send(b'[%s]%s' % (bytes(ctime(), 'UTF-8'), data))