小编dlm*_*dlm的帖子

如何使LAN客户端可以发现服务器

我正在使用python中的多人游戏,它使用套接字库进行网络连接.该游戏将支持局域网上的游戏.一个玩家将设置服务器,LAN上的其他玩家将能够加入游戏.

为了实现这一点,我需要一种简单的方法让玩家发现可用服务器列表(玩家不应该被要求输入IP地址!).我首选的解决方案只使用python套接字库(以及标准库的其他部分).

我要找的是客户端和服务器代码:

  • 客户端:向在LAN上某个端口上侦听的所有计算机广播其游戏请求

  • server(s):以可用性回复客户端

根据Hans在下面的回答中提出的建议,可以使用UDP套接字来响应来自客户端的广播请求.

服务器:

#UDP server responds to broadcast packets
#you can have more than one instance of these running
import socket
address = ('', 54545)
server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR,1)
server_socket.bind(address)

while True:
    print "Listening"
    recv_data, addr = server_socket.recvfrom(2048)
    print addr,':',recv_data
    server_socket.sendto("*"+recv_data, addr)
Run Code Online (Sandbox Code Playgroud)

客户:

#UDP client broadcasts to server(s)
import socket

address = ('<broadcast>', 54545)
client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
client_socket.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)

data = "Request"
client_socket.sendto(data, address)
while True:
    recv_data, addr = client_socket.recvfrom(2048)
    print addr,recv_data …
Run Code Online (Sandbox Code Playgroud)

python networking game-development kivy

6
推荐指数
1
解决办法
5599
查看次数

在 numpy 中创建作为可变长度范围序列的数组的有效方法

假设我有一个数组

import numpy as np
x=np.array([5,7,2])
Run Code Online (Sandbox Code Playgroud)

我想创建一个数组,其中包含一系列范围堆叠在一起,每个范围的长度由 x 给出:

y=np.hstack([np.arange(1,n+1) for n in x])
Run Code Online (Sandbox Code Playgroud)

有没有办法在没有列表理解或循环的速度损失的情况下做到这一点。(x 可能是一个非常大的数组)

结果应该是

y == np.array([1,2,3,4,5,1,2,3,4,5,6,7,1,2])
Run Code Online (Sandbox Code Playgroud)

python numpy

6
推荐指数
2
解决办法
475
查看次数

过滤pandas.DataFrame中的索引级别

如果我有一个多索引数据帧:

import pandas as pd
df = pd.DataFrame([[1,2,3],[4,5,6],[7,8,9]],columns=['a','b','c']).set_index(['a','b'])
Run Code Online (Sandbox Code Playgroud)

我可以简单地过滤列上的数据帧,例如:

df[df.c>4]
Run Code Online (Sandbox Code Playgroud)

但是要在索引级别上做同样的事情,比如说"b",我做不到:

df[df.b>4]
Run Code Online (Sandbox Code Playgroud)

相反,我可以这样做:

df[df.index.get_level_values('b')>4]
Run Code Online (Sandbox Code Playgroud)

但是,有一个不那么冗长的方法吗?

python pandas

6
推荐指数
1
解决办法
2495
查看次数

标签 统计

python ×3

game-development ×1

kivy ×1

networking ×1

numpy ×1

pandas ×1