2016-09-07 23 views
5

bytes``` Benim piton versiyonunu 0 okumak CentOS 6.8
Benim test.thrift dosyası:piton tasarruf hatası `` `TSocket

const string HELLO_IN_KOREAN = "an-nyoung-ha-se-yo" 
const string HELLO_IN_FRENCH = "bonjour!" 
const string HELLO_IN_JAPANESE = "konichiwa!" 

service HelloWorld { 
    void ping(), 
    string sayHello(), 
    string sayMsg(1:string msg) 
} 

client.py

# -*-coding:utf-8-*- 

from test import HelloWorld 
from test.constants import * 

from thrift import Thrift 
from thrift.transport import TSocket 
from thrift.transport import TTransport 
from thrift.protocol import TBinaryProtocol 


# Make socket 
transport = TSocket.TSocket('192.168.189.156', 30303) 

# Buffering is critical. Raw sockets are very slow 
transport = TTransport.TBufferedTransport(transport) 

# Wrap in a protocol 
protocol = TBinaryProtocol.TBinaryProtocol(transport) 

# Create a client to use the protocol encoder 
client = HelloWorld.Client(protocol) 

# Connect! 
transport.open() 

client.ping() 
print "ping()" 

msg = client.sayHello() 
print msg 
msg = client.sayMsg(HELLO_IN_KOREAN) 
print msg 

transport.close() 

server.py:

# -*-coding:utf-8-*- 

from test.HelloWorld import Processor 
from thrift.transport import TSocket 
from thrift.transport import TTransport 
from thrift.protocol import TBinaryProtocol 
from thrift.server import TServer 


class HelloWorldHandler(object): 
    def __init__(self): 
     self.log = {} 

    def ping(self): 
     print "ping()" 

    def sayHello(self): 
     print "sayHello()" 
     return "say hello from 156" 

    def sayMsg(self, msg): 
     print "sayMsg(" + msg + ")" 
     return "say " + msg + " from 156" 


handler = HelloWorldHandler() 
processor = Processor(handler) 
transport = TSocket.TServerSocket("192.168.189.156", 30303) 
tfactory = TTransport.TBufferedTransportFactory() 
pfactory = TBinaryProtocol.TBinaryProtocolFactory() 

server = TServer.TThreadPoolServer(processor, transport, tfactory, pfactory) 

print "Starting python server..." 
server.serve() 
print "done!" 

Benim hatası:

ping() 
Traceback (most recent call last): 
    File "client.py", line 29, in <module> 
    msg = client.sayHello() 
    File "/home/zhihao/bfd_mf_report_warning_service/local_test/test/HelloWorld.py", line 68, in sayHello 
    return self.recv_sayHello() 
    File "/home/zhihao/bfd_mf_report_warning_service/local_test/test/HelloWorld.py", line 79, in recv_sayHello 
    (fname, mtype, rseqid) = iprot.readMessageBegin() 
    File "build/bdist.linux-x86_64/egg/thrift/protocol/TBinaryProtocol.py", line 126, in readMessageBegin 
    File "build/bdist.linux-x86_64/egg/thrift/protocol/TBinaryProtocol.py", line 206, in readI32 
    File "build/bdist.linux-x86_64/egg/thrift/transport/TTransport.py", line 58, in readAll 
    File "build/bdist.linux-x86_64/egg/thrift/transport/TTransport.py", line 159, in read 
    File "build/bdist.linux-x86_64/egg/thrift/transport/TSocket.py", line 120, in read 
thrift.transport.TTransport.TTransportException: TSocket read 0 bytes 

cevap

3

Benim OS ortamı problemleri.
30303 numaralı bağlantı noktasını 9999 olarak değiştirdim, başarıyla çalıştı.

+0

Aslında, kodlarınızda herhangi bir hata buluyorum. Ben tasarruf sunucusu 30303 bağlantı noktası ve herhangi bir hata yok. – user3410960

4

Sanırım bu soru eski ama aynı hata mesajını gördüm. Sunucu tarafında bir yazım hatası olduğu ortaya çıktı. Thrift kütüphaneleri, Python günlüğü kullanarak mesajı kaydetmeye çalışıyorlardı, ancak günlüğe kaydetme işlemini yapmamıştım, bu yüzden sadece "Logger for logger" bulunamadı. "Thrift.server.TServer" ". Bazı asgari günlüğü, (sunucu tarafında bu kodu ekleyin) ne zaman

:

import logging 
logging.basicConfig(level=logging.DEBUG) 

günlüğü, bir Python yığın izleme bana yazım hatası gösterdi tamir ettim ve tekrar çalıştı. "TSocket 0 bayt oku" hatası, sunucunun bir istisna aldığını ve bir mesaj yazmamış olduğunu gösterir.