0

サーバーから無限ループで値を返す代わりに、接続サーバーがまだ実行されている間に必要な特定の位置を返す getPositions() などのメソッドを作成したいと考えています。どうすればいいのですか?

import socket
import os,sys
import time

HOST = '59.191.193.59'
PORT = 5555

client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect((HOST,PORT))

screen_width = 0
screen_height = 0
while True:

    client_socket.send("loc\n")
    data = client_socket.recv(8192)
    coordinates = data.split()

    if(not(coordinates[-1] == "eom" and coordinates[0] == "start")):
        continue

    if (screen_width != int(coordinates[2])):
        screen_width = int(coordinates[2])
        screen_height = int(coordinates[3])


    print int(coordinates[8])
    print int(coordinates[9])
    print int(coordinates[12])
    print int(coordinates[13])

ここに画像の説明を入力

4

2 に答える 2

0
import socket
import os,sys
import time

HOST = '59.191.193.59'
PORT = 5555

# don't restrict yourself to IPv4 without any need:
client_socket = socket.create_connection((HOST,PORT))

def update_coordinates(client_socket):
    client_socket.send("loc\n")
    data = client_socket.recv(8192)
    coordinates = data.split()

    if(not(coordinates[-1] == "eom" and coordinates[0] == "start")):
        return None # or so

    return [int(i) for i in coordinates[1:-1]]

screen_width = 0
screen_height = 0

while True:
    coord = update_coordinates(screen_width)
    if coord is None: continue
    # ! indexes have changed...
    if (screen_width != coord[1]):
        screen_width = coord[1]
        screen_height = coord[2]
    print coordinates[7]
    print coordinates[8]
    print coordinates[11]
    print coordinates[12]

質問が適切かどうかはわかりませんが...

于 2012-10-04T09:37:46.140 に答える
0

これは非常に簡単です。

import socket
import os,sys
import time
from threading import Thread

HOST = '59.191.193.59'
PORT = 5555

COORDINATES = []

def connect():   
    globals()['client_socket'] = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    client_socket.connect((HOST,PORT))

def update_coordinates():
    connect()
    screen_width = 0
    screen_height = 0
    while True:
        try:
            client_socket.send("loc\n")
            data = client_socket.recv(8192)
        exept:
            connect();
            continue;

        globals()['COORDINATES'] = data.split()

        if(not(COORDINATES[-1] == "eom" and COORDINATES[0] == "start")):
            continue

            if (screen_width != int(COORDINATES[2])):
                screen_width = int(COORDINATES[2])
                screen_height = int(COORDINATES[3])            

Thread(target=update_coordinates).start()

// Run your controlling app here. COORDINATES will be available in the global scope and will be updated constantly

編集: 障害が発生した場合にソケット接続を再確立するために、get_coordinates 関数内にメソッドを作成しました。

于 2012-10-04T08:40:51.487 に答える