В настоящее время я создаю клиент python для проекта. Я знаю мелочи о python. Извините, если мой код невелик! Мой клиент отлично работает, он подключается к серверу и «разговаривает» с ним, с легкостью. Но я хочу использовать выбор, как я в C. Так теперь мой клиент выглядит следующим образом:Использование select() в клиенте python
p = GetOptions()
mess = MessageClass()
ic = InterpretClass()
cc = CommandClass()
s = None
def send_name_to_server(s):
var = 'TEAM '
var += p.getName()
#var += '\r\n'
mess.sendMessage(s, var)
def protocol(s):
rec = mess.readMessage(s)
if (ic.interpret_bienvenue(s, rec, p) == 1):
send_name_to_server(s)
rec = mess.readMessage(s)
ic.interpret_num_client(s, rec, p)
rec = mess.readMessage(s)
ic.interpret_size(s, rec, p)
var = 'OK'
mess.sendMessage(s, var)
def main():
try:
p.parseOpt()
if not p.getName():
print('Exception : You need a name to start')
sys.exit()
mc = ModuleConnect()
s = mc.connect(p.getHost(), p.getPort())
protocol(s)
s.close()
except ConnectionRefusedError:
print('Exception : The server has refused the connection')
except getopt.GetoptError:
print('Usage : client.py -n [NAME] -h [HOST] -p [PORT]')
except:
print('Exception : An error has occured')
if __name__ == "__main__":
main()
И мой класс ModuleConnect выглядит следующим образом:
импорт гнездо
class ModuleConnect(object):
""" Create connexion """
def connect(self, host, port):
s = socket.socket()
s.connect((host, int(port)))
return s
Итак, как это работает? Я разбираю аргументы, полученные мной из командной строки с помощью метода parseOpt (здесь не важно), затем я запускаю свое соединение с методом connect из ModuleConnect, а затем я разговариваю с моим сервером с помощью метода протокола. Просто я думаю? В C для того, чтобы использовать выбор я бы сделать что-то вроде этого:
FD_SET(0, &(c->read_fds));
FD_SET(c->sd, &(c->read_fds));
if (select(c->sd + 1, &(c->read_fds), NULL, NULL, NULL) == -1)
{
perror("Client-select() error ! ");
exit(1);
}
if (FD_ISSET(c->sd, &(c->read_fds)))
read_message_from_server(c);
if (FD_ISSET(0, &(c->read_fds)))
send_message(c);
Если мой сервер говорит со мной первым, я прочитал, что он сказал мне, если я не послать сообщение я получил, чтобы отправить его. Но я не могу найти способ сделать это в python.
Снова извините, я полный ноб с питоном, и даже после учебника я не могу найти способ.
Благодарим за помощь!
Разве вы не используете библиотеку SocketServer? – EvertW
В этой библиотеке нет выбора, как это может мне помочь? –