Отправка и получение данных между python и tcl - PullRequest
1 голос
/ 28 марта 2012

Я новичок в этом блоге, когда дело доходит до публикации, хотя я нашел много ответов здесь.Я старая версия tcl, установленная на Linux, на работе, и она не поддерживает IPv6.Мне нужно протестировать некоторые функции IPv6 с помощью tcl, и мне нужно открыть сокеты IPv6.Я продолжил делать это, используя python, но моя проблема заключается в обмене данными между tcl и python.

Я реализовал сервер на Python и клиент, который общается с этим сервером по tcl.Проблема, с которой я сталкиваюсь, заключается в возможности сделать следующее из tcl: чтение из python -> запись в python -> чтение из python -> запись в python ...... (Вы поймете):

Я пытался использовать fileevent и vwait, но это не сработало.Кто-нибудь делал это раньше?

1 Ответ

1 голос
/ 24 октября 2012

Python-сервер:

import socket
host = ''
port = 45000
s = socket.socket()
s.bind((host, port))
s.listen(1)
print "Listening on port %d" % port
while 1:
    try:
        sock, addr = s.accept()
        print "Connection from", sock.getpeername()
        while 1:
            data = sock.recv(4096)
            # Check if still alive
            if len(data) == 0:
                break
            # Ignore new lines
            req = data.strip()
            if len(req) == 0:
                continue
            # Print the request
            print 'Received <--- %s' % req
            # Do something with it
            resp = "Hello TCL, this is your response: %s\n" % req.encode('hex')
            print 'Sent     ---> %s' % resp
            sock.sendall(resp)
    except socket.error, ex:
        print '%s' % ex
        pass
    except KeyboardInterrupt:
        sock.close()
        break

TCL-клиент:

set host "127.0.0.1"
set port 45000
# Connect to server
set my_sock [socket $host $port]
# Disable line buffering
fconfigure $my_sock -buffering none
set i 0
while {1} {
    # Send data
    set request "Hello Python #$i"
    puts "Sent     ---> $request"
    puts $my_sock "$request"
    # Wait for a response
    gets $my_sock response
    puts "Received <--- $response"
    after 5000
    incr i
    puts ""
}

Вывод сервера:

$ python python_server.py
Listening on port 45000
Connection from ('127.0.0.1', 1234)
Received <--- Hello Python #0
Sent     ---> Hello TCL, this is your response: 48656c6c6f20507974686f6e202330

Received <--- Hello Python #1
Sent     ---> Hello TCL, this is your response: 48656c6c6f20507974686f6e202331

Вывод клиента:

$ tclsh85 tcl_client.tcl
Sent     ---> Hello Python #0
Received <--- Hello TCL, this is your response: 48656c6c6f20507974686f6e202330

Sent     ---> Hello Python #1
Received <--- Hello TCL, this is your response: 48656c6c6f20507974686f6e202331
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...