Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 1, 2009 00:30:54

ssh2010
От:
Зарегистрирован: 2009-09-01
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

вызвать функцию

есть задача написать демон, который будет слушать порт одной програмки и адекватно реагировать на события. Как слушать порт и реагировать на события и с горем пополам разобрался, но теперь стала задача посылать комманду через этот порт в программку и получать ответ о выполнении. Причем кол-во клиентов, которые могут отращаться через нашего демона в программку может быль большим, и каждому нужно отправить ответ на его запрос.

вообщем вот код:

#!/bin/env python3.1

HOST, PORT = "", 2039
global msconn

import socket
import threading, _thread
import socketserver

class ThreadedTCPRequestHandler(socketserver.BaseRequestHandler):

def handle(self):
while (1):
msconn.send("test")
data = serv.recv(1024)
self.request.send(data)


class ThreadedTCPServer(socketserver.ThreadingMixIn, socketserver.TCPServer):
pass

def server ():
global HOST, PORT
server = ThreadedTCPServer((HOST, PORT), ThreadedTCPRequestHandler)
ip, port = server.server_address
server_thread = threading.Thread(target=server.serve_forever)
server_thread.setDaemon(True)
server_thread.run()

def server_mapi():
global msconn
msconn = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
msconn.connect((MANAGER,MANAGERPORT))
msconn.send("Action: Login\r\n")
msconn.send("UserName: " + USERNAME + "\r\n")
msconn.send("Secret: " + SECRET + "\r\n\r\n");


if __name__ == "__main__":

server = ThreadedTCPServer((HOST, PORT), ThreadedTCPRequestHandler)
ip, port = server.server_address

server_thread = threading.Thread(target=server.serve_forever)
server_thread.setDaemon(True)
server_thread.run()
_thread.start_new_thread(server_mapi,())
на первом этапе мне нужно сделать так, чтоб при подключении телнетом на айпишник компа, где запущена эа прога выдавало сообщение “test”.

но в результате пишет это:
----------------------------------------
Exception happened during processing of request from ('94.248.3.135', 10854)
Traceback (most recent call last):
File "/usr/local/lib/python3.1/socketserver.py", line 558, in process_request_thread
self.finish_request(request, client_address)
File "/usr/local/lib/python3.1/socketserver.py", line 320, in finish_request
self.RequestHandlerClass(request, client_address, self)
File "/usr/local/lib/python3.1/socketserver.py", line 614, in __init__
self.handle()
File "./TCPServer.py", line 20, in handle
msconn.send("aaa")
NameError: global name 'msconn' is not defined
----------------------------------------
я понимаю что это значит, но как исправить?



Офлайн

#2 Сен. 1, 2009 05:36:39

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

вызвать функцию

добавь: global msconn
в функцию где используешь эту переменную ( в ф-ю отправки сообщения “тест” )

Офлайн

#3 Сен. 3, 2009 00:22:40

ssh2010
От:
Зарегистрирован: 2009-09-01
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

вызвать функцию

не помогает ((



Офлайн

#4 Сен. 3, 2009 06:50:27

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version