2016-06-13 13 views
-2

Ich habe diesen Fehler gespeichert mit Variablen zu tun, wenn ich Berechnungen bin versucht, mit dem zu tun Variablen mit Beize von meiner Client-Datei auf meinen Server gesendet, wenn ein zweiter Computer heren meinen Server verbindet meinen Code für meinen Servermit diesen Fehlern Typeerror: kann nicht ‚str‘ und ‚int‘ Objekte verketten, wenn sie versucht Mathe mit Gurke</p> <pre><code>TypeError: cannot concatenate 'str' and 'int' objects </code></pre> <p>

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

ich habe es so, wenn ein Client verbindet sie die Variable join sendet, die den Wert der hat Server und dann der Server fügt das zuhinzuund sendet das zurück. Auf diese Weise sendet ein zweiter Computer, der die gleiche Client-Datei verwendet, denselben Server und sendet 2 an den zweiten Computer. Auf diese Weise kann die Client-Datei erkennen, ob sie als erste dem Server oder der zweiten Server usw. beitritt.

Aber das funktioniert nicht für mich der Server füttert mich den Fehler oben.

+0

Wir brauchen nicht diesen ganzen Code. Nur die Zeile, in der es mit einem kleinen Kontext und der vollständigen Stack-Trace auftritt, wäre nett. So wie es ist, sagt Ihnen der Fehler genau, was falsch ist: Sie versuchen, eine Zeichenfolge (str) und eine Zahl (int) hinzuzufügen. Python wird das nicht ohne eine explizite Konvertierung in die eine oder andere Weise tun. –

Antwort

1

Sie ersetzt die pjoininteger mit einem String:

# at the top 
pjoin = 0 

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

pickle.dumps() einen String-Objekt zurückgibt. Nächstes Mal, wenn Sie eine Antwort von einem Client zu bekommen, werden Sie jetzt eine ganze Zahl in einen String zusammenzufassen:

pjoin += (join) 

Es sieht für mich Sie dies nicht erneut mit pjoin für das pickle.dumps() Ergebnis beheben können:

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