Cho đến nay tôi đã có thể tìm ra một ổ cắm cơ bản trong python 3.2. Máy khách gửi một số dữ liệu, một tọa độ X và Y, đến máy chủ và máy chủ lấy dữ liệu và gửi lại một thông báo xác nhận. Nhưng rắc rối tôi gặp phải là làm cho nó lắng nghe giữa các máy tính. Máy chủ và máy khách của tôi hoạt động hoàn hảo khi tôi chạy chúng song song trên cùng một máy tính, nhưng tôi muốn kết nối chúng trong khi chạy trên các máy tính khác nhau.Ổ cắm giữa các máy tính
Tôi có một máy tính ở tầng trên và một máy tính ở tầng dưới, cả hai đều sử dụng cùng một mạng không dây. Có cách nào tôi có thể kết nối máy chủ và máy khách của tôi từ một trong các máy tính này không?
Tôi đã thử thay đổi IP máy chủ thành địa chỉ IP của modem không dây của tôi, nhưng điều đó không hoạt động.
Đây là mã của tôi cho đến nay, sự khác biệt duy nhất là tôi đã thay đổi địa chỉ IP lại đến một địa chỉ lặp lại tiêu chuẩn, vì chỉ cần thay đổi nó để IP của tôi đã không làm việc:
Chủ đầu tư:
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()
Chỉ trong trường hợp bạn đang tự hỏi tại sao các khách hàng là quá lớn, đó là bởi vì tôi đang cố gắng để làm cho một trò chơi nhỏ trong pygame rằng sẽ nhiều người chơi. Không phải internet nhưng LAN hoặc không dây giữa hai máy tính của tôi. Tôi rất mới vào ổ cắm và các công cụ liên quan đến web (Tôi không biết nếu LAN về cơ bản giống như không dây hay cái gì) vì vậy bất kỳ trợ giúp nào về điều này được đánh giá cao. :)
Được rồi, tôi sẽ chạy ipconfig để tìm địa chỉ IP và thay đổi địa chỉ đó trong ứng dụng khách. Tôi cũng sẽ thay đổi 'hostName = gethostbyname ('localhost')' thành 'hostName = '0.0.0.0''. Bây giờ khi bạn nói không an toàn, bạn có ý nghĩa gì không an toàn? Tôi không muốn mọi người đưa virus vào máy tính của tôi một cách ngẫu nhiên. Có cách nào để không nghe tất cả mọi người, chỉ những người trên cùng một bộ định tuyến không dây? (bộ định tuyến được bảo vệ bằng mật khẩu) – hammythepig
Kẻ tấn công có thể gửi bất kỳ dữ liệu TCP nào đến chương trình của bạn. Bất kỳ lỗ hổng nào nằm trong OS/Python/chương trình của bạn. Tôi sẽ không quá lo lắng về bảo mật vì tôi cho rằng bạn không có bất kỳ tài sản thực sự nào trên máy chủ của bạn. Thành thật mà nói, tôi không chắc chắn cách liên kết với bộ định tuyến. Có lẽ ai đó khác có thể trả lời điều này? – dbkaplun
Ok, vâng tôi không quá lo lắng về sự bất an nhỏ, đây chỉ là một trò chơi nhỏ cho vui. Tôi sẽ thử nó khi tôi về nhà và bình luận một lần nữa tối nay và cho bạn biết nó như thế nào. Hy vọng rằng tôi có thể chấp nhận câu trả lời của bạn :) – hammythepig