Bisher konnte ich einen Socket in Python 3.2 ausarbeiten. Der Client sendet einige Daten, eine X- und eine Y-Koordinate, an den Server, und der Server übernimmt die Daten und sendet eine Bestätigungsnachricht zurück. Aber das Problem, das ich habe, ist, es zwischen den Computern zu hören. Mein Server und mein Client funktionieren einwandfrei, wenn ich sie nebeneinander auf demselben Computer ausführe, aber ich möchte, dass sie sich verbinden, während sie auf verschiedenen Computern laufen.Steckdosen zwischen Computern
Ich habe einen Computer im Obergeschoss, und einen Computer im Erdgeschoss, beide mit dem gleichen WLAN. Gibt es eine Möglichkeit, meinen Server und meinen Client mit einem dieser Computer zu verbinden?
Ich habe bereits versucht, die Server-IP auf die IP-Adresse meines drahtlosen Modems zu ändern, aber das hat nicht funktioniert.
Hier ist mein Code so weit, der einzige Unterschied ist, ich die IP-Adresse zurück zu einem Standard-Loopback-Adresse geändert, da es nur meine IP-Wechsel nicht funktioniert:
Auftraggeber:
import pygame, sys
from socket import socket, AF_INET, SOCK_DGRAM
from time import gmtime, strftime
from pygame.locals import *
SERVER_IP = '127.0.0.1'
PORT_NUMBER = 5000
SCREEN_X = 400
SCREEN_Y = 400
SIZE = 1024
PIC_PATH = "picture/path/goes/here.bmp"
print ("Test client sending packets to IP {0}, via port {1}\n".format(SERVER_IP, PORT_NUMBER))
mySocket = socket(AF_INET, SOCK_DGRAM)
x = y = 0
screen = pygame.display.set_mode((SCREEN_X, SCREEN_Y)) #Make the screen
ending = False
word = "True"
clock = pygame.time.Clock() #tick-tock
grid = pygame.image.load(PIC_PATH) #Load the sheet
gridRect = grid.get_rect()
screen.blit(grid, gridRect)
pygame.display.flip()
while ending==False:
for event in pygame.event.get():
if event.type == KEYDOWN: # key down or up?
if event.key == K_RIGHT: x+=1
elif event.key == K_LEFT: x-=1
elif event.key == K_UP: y-=1
elif event.key == K_DOWN: y+=1
if event.key == K_ESCAPE:
ending=True # Time to leave
print("Stopped Early by user")
if ending==True: word="False"
localTime = strftime("%H:%M:%S", gmtime())
mySocket.sendto(bytes(str(x), 'UTF-8') , (SERVER_IP, PORT_NUMBER))
mySocket.sendto(bytes(str(y), 'UTF-8') , (SERVER_IP, PORT_NUMBER))
mySocket.sendto(bytes(word, 'UTF-8') , (SERVER_IP, PORT_NUMBER))
print ("Sending packet... " + localTime)
clock.tick(10)
try:
(data, addr) = mySocket.recvfrom(SIZE)
print ("Received packet from: " + str(addr))
print ("Received: " + data.decode('UTF-8'))
except: ending=False
if ending==True:
pygame.quit()
sys.exit()
Server:
from socket import socket, gethostbyname, AF_INET, SOCK_DGRAM
import sys
PORT_NUMBER = 5000
SIZE = 1024
hostName = gethostbyname('localhost')
mySocket = socket(AF_INET, SOCK_DGRAM)
mySocket.bind((hostName, PORT_NUMBER))
print ("Test server listening on port {0}\n".format(PORT_NUMBER))
flag="True"
while flag=="True":
#Show that data was received:
(data, addr) = mySocket.recvfrom(SIZE)
xer=data.decode('UTF-8')
print ("Received packet from: " + str(addr) + ", X value:" + str(xer))
(data, addr) = mySocket.recvfrom(SIZE)
yer=data.decode('UTF-8')
print ("Received packet from: " + str(addr) + ", Y value:" + str(yer))
#Check to see if the other program wants to close:
(flagger, addr) = mySocket.recvfrom(SIZE)
flag=flagger.decode('UTF-8')
#Send a message back to the client:
if flag=="False": s="Good-bye!"
else: s="Read you loud and clear"
mySocket.sendto(bytes(s, 'UTF-8') , (addr))
sys.exit()
Nur falls Sie sich fragen, warum der Kunde so groß ist, dann ist es, weil ich versuche, ein kleines Spiel in pygame zu machen, die Multi-Player sein. Kein Internet, aber LAN oder WLAN zwischen meinen beiden Computern. Ich bin sehr neu zu Sockets und Web-verwandten Sachen (ich weiß nicht, ob LAN ist im Grunde das gleiche wie Wireless oder was), so dass jede Hilfe zu diesem wird sehr geschätzt. :)
In Ordnung, ich werde ipconfig ausführen, um die IP-Adresse zu finden, und diese im Client ändern. Ich werde auch den 'hostName = gethostbyname ('localhost')' in 'hostName = '0.0.0.0' 'ändern. Wenn du jetzt unsicher sagst, wie unsicher meinst du das? Ich möchte nicht, dass Leute zufällig Viren auf meinen Computer setzen. Gibt es eine Möglichkeit, nicht alle zu hören, nur diejenigen auf dem gleichen WLAN-Router? (Der Router ist passwortgeschützt.) – hammythepig
Ein Angreifer kann beliebige TCP-Daten an Ihr Programm senden. Alle Sicherheitslücken liegen in Ihrem OS/Python/Ihrem Programm. Ich würde mir keine Sorgen um die Sicherheit machen, da ich davon ausgehe, dass Sie keine echten Assets auf Ihrem Server haben. Um ehrlich zu sein bin ich mir nicht sicher, wie man nur an den Router bindet. Vielleicht kann jemand anderes das beantworten? – dbkaplun
Ok, ja ich mache mir keine Sorgen wegen der kleinen Unsicherheit, das ist nur ein kleines Spiel zum Spaß. Ich werde es ausprobieren, wenn ich nach Hause komme und heute Nacht wieder kommentiere und dir erzähle, wie es gelaufen ist. Hoffentlich kann ich deine Antwort annehmen :) – hammythepig