До сих пор мне удавалось разработать базовый сокет в python . ] 3.2. Клиент отправляет некоторые данные, координаты X и Y, на сервер, а сервер принимает данные и отправляет обратно подтверждающее сообщение. Но проблема, с которой я столкнулся, заключается в том, чтобы заставить его слушать между компьютерами. Мой сервер и клиент работают идеально, когда я запускаю их бок о бок на одном компьютере, но я хочу, чтобы они подключались, работая на разных компьютерах.
У меня есть один компьютер наверху и один внизу, оба используют один и тот же беспроводной интернет. Есть ли способ подключить мой сервер и клиент с одного из этих компьютеров?
Я уже пытался изменить IP-адрес сервера на IP-адрес моего беспроводного модема, но это не сработало.
Вот мой код на данный момент, единственная разница в том, что я изменил IP-адрес обратно на стандартный петлевой адрес, так как простое изменение его на мой IP не сработало:
Клиент:
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()
Сервер:
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()
На всякий случай, если вам интересно, почему клиент такой большой, это потому, что я пытаюсь сделать небольшую игру в pygame, которая будет многопользовательской. Не интернет, а локальная сеть или беспроводная связь между двумя моими компьютерами. Я очень новичок в сокетах и веб-вещах (я не знаю, является ли локальная сеть в основном такой же, как беспроводная сеть или что-то в этом роде), поэтому любая помощь в этом очень ценится.:)