Запуск простого Python TCP-сервера при входе в систему Debian - PullRequest
0 голосов
/ 14 марта 2012

Я пытаюсь запустить простой сервер при запуске.Я использую ОС Debian 6.0.Я добавил строку в свой .profile для запуска скрипта python: python /root/desktopnavserver2.py Компьютер загружается и входит в систему, однако я получаю сообщение об ошибке ниже.Скрипт работает нормально, когда у меня нет строки add в Debian .profile, и я просто запускаю скрипт самостоятельно в консоли.Любая помощь?

Ошибка трассировки:

Traceback (most recent call last):
  File "/root/Desktop/navserver2.py", line 39, in <module>
    server = SocketServer.TCPServer((HOST, PORT), MyTCPHandler)
  File "/usr/lib/python2.6/SocketServer.py", line 402, in __init__
    self.server_bind()
  File "/usr/lib/python2.6/SocketServer.py", line 413, in server_bind
    self.socket.bind(self.server_address)
  File "<string>", line 1, in bind
error: [Errno 98] Address already in use

Источник:

#!/usr/bin/python

import SocketServer
import serial
com2 = serial.Serial(
    port = 1,
    parity = serial.PARITY_NONE,
    bytesize = serial.EIGHTBITS,
    stopbits = serial.STOPBITS_ONE,
    timeout=3,
    xonxoff = 0,
    rtscts = 0,
    baudrate = 9600
)

class MyTCPHandler(SocketServer.BaseRequestHandler):
    """
    The RequestHandler class for our server.

    It is instantiated once per connection to the server, and must
    override the handle() method to implement communication to the
    client.
    """


    def handle(self):
        # self.request is the TCP socket connected to the client
        self.data = self.request.recv(1024).strip()
        #print "%s wrote:"%self.client_address[0]
        #print self.data
        # just send back the same data, but upper-cased
        self.request.sendall(self.data.upper())
        com2.write(self.data)

if __name__ == "__main__":
    HOST, PORT = "192.168.0.200", 14052 #change to 192.168.0.200

    # Create the server, binding to localhost on port 9999
    server = SocketServer.TCPServer((HOST, PORT), MyTCPHandler)

    # Activate the server; this will keep running until you
    # interrupt the program with Ctrl-C
    server.serve_forever()

Ответы [ 2 ]

3 голосов
/ 14 марта 2012

Линия error: [Errno 98] Address already in use объясняет это - узнайте, что работает на этом порту при входе в вашу программу (подсказка: .py вызывается дважды?)

1 голос
/ 14 марта 2012

Я считаю, что .profile выполняется каждым экземпляром оболочки, которая идентифицирует себя как оболочка входа в систему. Возможно, у вас есть несколько таких оболочек.

В любом случае помещать скрипт с одним экземпляром в .profile - плохая идея - это значит, что вы можете иметь только один сеанс входа в систему, следующие сеансы вызовут эту ошибку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...