ich hab eigentlich ein ganz einfaches Skript, welches unter UDP prima lief, nun aber auf TCP umgeschrieben werden soll, um dann in eine Grid geschickt zu werden, um verteiltest rechnen zu üben.
Dabei geht es darum die Gleichverteilung von zufällig gewürfelten Zahlen zu zeigen, d.h. dass bei großen Zahlen, alle Augenzahlen in etwa gleichoft geworfen worden sind.
Allerdings gibt mein Skript bei Senden alle Werte in einem Schub zurück und eben nicht als einzelne Werte, weswegen des Programm nicht terminiert.
Hier mal der Code:
Server:
Code: Alles auswählen
#!/usr/bin/python2
import math
import socket
import random
TCP_IP = '127.0.0.1'
TCP_PORT = 5005
BUFFER_SIZE = 128 # Normally 1024, but we want fast response
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((TCP_IP, TCP_PORT))
s.listen(1)
roll = [0,1,2,3,4,5]
conn, addr = s.accept()
print "Connection address: " , addr
while 1:
data = conn.recv(BUFFER_SIZE)
N = int(data)
for x in range(0,N):
dice = random.randint(0,5)
roll[dice] = roll[dice] + 1
for x in range(0,6):
data = str(roll[x])
conn.send(data) # echo
for x in range(0,6):
roll[x] = 0
if not data: break
conn.close()
Code: Alles auswählen
#!/usr/bin/python2
import socket
import math
import random
TCP_IP = '127.0.0.1'
TCP_PORT = 5005
BUFFER_SIZE = 8
DATA = raw_input("Anzahl der Wuerfe: ")
N = int(DATA)
roll = [0,1,2,3,4,5]
Ni1 = N + math.sqrt(N)
Ni2 = N - math.sqrt(N)
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((TCP_IP, TCP_PORT))
s.send(DATA)
for x in range(0,6):
print str(x) + "recieved!"
roll[x] = int(s.recv(BUFFER_SIZE))
print str(roll[x])
s.close()
for x in range(0,6):
if roll[x] < Ni1 and roll[x] > Ni2:
print str(x+1) + " times " + str(roll[x]) + "in range"
else:
print str(x+1) + " is not in range"
print str(Ni1)
print str(Ni2)