【发布时间】:2020-01-02 03:09:40
【问题描述】:
这是我第一次尝试使用 python 自定义游戏/界面。我已经开始从控制器连接到游戏服务器所需的通信。我想让通信成为一个对象,以便我可以在游戏中调用它。我遇到的问题是,当我调用 server.serverRun() 时,我得到一个异常 OSError: [WinError 10022] An invalid argument was provided。现在,当在对象之外时,这一切都运行良好。我不确定我错过了什么。
'''
#game.py
import math,random,sys,time,os
import comm
serverStatus = False
while True:
server = comm.server()
if serverStatus == False:
serverStatus = server.serverStart("127.0.0.1",1234)
else:
server.serverRun()
#comm.py
import os,socket,pickle,select
class server():
HeaderLength = 10
GameStatus = {"state": 0, "Sound" : 0}
def __init__(self):
self.clients = {}
self.clientSocket = ""
self.clientAddress = ("",0)
# Create a socket
# socket.AF_INET - address family, IPv4, some other possible are AF_INET6, AF_BLUETOOTH, AF_UNIX
# socket.SOCK_STREAM - TCP, conection-based, socket.SOCK_DGRAM - UDP, connectionless, datagrams, socket.SOCK_RAW - raw IP packets
self.serverSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# SO_ - socket option
# SOL_ - socket option level
# Sets REUSEADDR (as a socket option) to 1 on socket
self.serverSocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
def serverStart(self,IP,PORT):
try:
# Bind, so server informs operating system that it's going to use given IP and port
# For a server using 0.0.0.0 means to listen on all available interfaces, useful to connect locally to 127.0.0.1 and remotely to LAN interface IP
self.serverSocket.bind((IP, PORT))
# This makes server listen to new connections
self.serverSocket.listen(5)
print (f"IP Adddress: {IP}")
print (f"Port #: {PORT}")
return True
except:
print ("Connection Error")
return False
def serverRun(self):
self.clientSocket, self.clientAddress = self.serverSocket.accept()
print(f"Address {self.clientAddress}")
'''
【问题讨论】: