2016-06-13 31 views
-2

我有這個錯誤具有這種錯誤類型錯誤:試圖做數學與存儲與泡菜

TypeError: cannot concatenate 'str' and 'int' objects 

,當我試圖做的計算與變量時,不能連接「海峽」和「廉政」對象變量發送到使用鹹菜從我的客戶端文件到我的服務器時,第二臺計算機加入我的服務器我的繼承人代碼爲我的服務器

import socket, select, pickle 
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
server.bind(('', 4000)) 
server.listen(5) 
pjoin = 0 

clients = [] 
while True: 
    Connections, wlist, xlist = select.select([server], [], [], 0.05) 

    for Connection in Connections: 
     client, Informations = Connection.accept() 
     clients.append(client) 

     clientsList = [] 
    try: 
     clientsList, wlist, xlist = select.select(clients, [], [], 0.05) 
    except select.error: 
     pass 
    else: 
     for clientInList in clientsList: 
      join = clientInList.recv(1024) 
      join = pickle.loads(join) 
      print(join) 
      pjoin += (join) 
      pjoin = pickle.dumps(pjoin) 
      clientInList.send(pjoin) 

clientInList.close() 
server.close() 

我有,所以當客戶端連接發送的變量join它具有價值的服務器,然後服務器將其添加到pjoin並將其發回。這樣,當第二臺計算機使用相同的客戶端文件加入同一臺服務器時,它最終將2發送給第二臺計算機,這樣客戶端文件就可以知道它是第一個加入服務器還是第二臺服務器,等等。

但這不適用於我服務器不斷餵養我上面的錯誤。

+0

我們不需要所有此代碼。就在它發生的那一行,有一點上下文,整個堆棧跟蹤會很好。事實上,錯誤告訴你到底發生了什麼錯誤:你正在嘗試添加一個字符串(str)和一個數字(int)。如果沒有明確的轉換,Python不會這麼做。 –

回答

1

更換了pjoin整數一個字符串:

# at the top 
pjoin = 0 

# inside the while True and for clientInList loops 
pjoin = pickle.dumps(pjoin) 

pickle.dumps()返回一個字符串對象。你會得到來自客戶端的響應下一次,你現在的整數,字符串:

pjoin += (join) 

在我看來,你可以通過重新使用pjoinpickle.dumps()結果沒有解決這個問題:

for clientInList in clientsList: 
    join = clientInList.recv(1024) 
    join = pickle.loads(join) 
    print(join) 
    pjoin += (join) 
    response = pickle.dumps(pjoin) 
    clientInList.send(response)