Programação de rede Python - Servidor TCP multithreading

Related Tags:1. Potencialize sua Web com Python
2. Shodan e API Python

Visão geral


O servidor TCP estabelece sockets com múltiplos clientes simultaneamente, exigindo uma thread para manter cada cliente.

Etapas de implementação



1. Importar o pacote socket
import socket

2. Criar um socket de servidor
socket.socket(AddressFamily, Type)
socket.AF_INET representa o tipo IPv4
SOCK_STREAM significa tcp
É necessário configurar a multiplexação de porta para atender múltiplos clientes
tcp_server_socket = socket.socket ( socket.AF_INET , socket.SOCK_STREAM ) _ _ _ _ _ _

#Multiplexação de porta: ao sair do servidor, a porta é liberada imediatamente
tcp_server_socket.setsockopt ( socket.SOL_SOCKET , socket.SO_REUSEADDR , True ) _ _ _ _ _ _

3. Vincular o número da porta
tcp_server_socket.bind
O primeiro parâmetro representa o endereço IP; geralmente não é necessário especificar, representando qualquer IP da máquina
O segundo parâmetro é o número da porta
tcp_server_socket.bind (( ' ' , 9090 ) )

4. Configurar a escuta
Indica o número máximo de conexões aguardando estabelecimento: 128
tcp_server_socket.listen ( 128 ) _ _

5. Aguardar a solicitação de conexão do cliente
Um novo socket é retornado sempre que o cliente e o servidor estabelecem uma conexão bem-sucedida
while True :
new_client , ip_port = tcp_server_socket.accept ( ) _
sub_thresd = threading . Thread ( target = handle , args = ( ip_port , new_client ))
sub_thresd.start ( ) _

6. Receber dados
Enviar e receber mensagens usando o socket recém-retornado
rece_data = new_client.recv ( 1024 ) _ _
if rece_data :
rece_data = rece_data.decode ( ' utf -8' )
print ( "Os dados recebidos são" , rece_data )

7. Enviar dados
send_content = "Problema em andamento"
send_data = send_content.encode ( ' utf -8' )
new_client.send ( send_data ) _ _
new_client.close ( ) _

8. Fechar o socket
tcp_server_socket.close ( ) _


Código:
import socket
import threading


def handle ( ip_port , new_client ):
print ( "O IP e o número da porta do cliente são: " , ip_port )
while True :
# 5. Receber dados
# Enviar e receber mensagens usando o socket recém-retornado
rece_data = new_client.recv ( 1024 ) _ _
if rece_data :
rece_data = rece_data.decode ( ' utf -8' )
print ( "Os dados recebidos são" , rece_data )
# 6. Enviar dados
send_content = "Problema em andamento"
send_data = send_content.encode ( ' utf -8' )
new_client.send ( send_data ) _ _
new_client.close ( ) _
else :
print ( "Cliente offline" , ip_port )
break


if __name__ == '__main__' :
# 1. Criar um socket de servidor
# socket.AF_INET representa o tipo IPv4
# SOCK_STREAM significa tcp
tcp_server_socket = socket.socket ( socket.AF_INET , socket.SOCK_STREAM ) _ _ _ _ _ _
tcp_server_socket.setsockopt ( socket.SOL_SOCKET , socket.SO_REUSEADDR , True ) _ _ _ _ _ _
#Multiplexação de porta: ao sair do servidor, a porta é liberada imediatamente
#socket.SOL_SOCKET representa o socket atual
#socket._RetAddress opções de multiplexação
#True determina a multiplexação
# 2. Vincular o número da porta
# O primeiro parâmetro indica o endereço IP; geralmente não é necessário configurar, representando qualquer IP da máquina
#O segundo parâmetro indica o número da porta
tcp_server_socket.bind (( ' ' , 9090 ) )
# 3. Configurar a escuta
# 128: Indica o número máximo de conexões aguardando estabelecimento
tcp_server_socket.listen ( 128 ) _ _
# 4. Aguardar a solicitação de conexão do cliente
#Sempre que o cliente e o servidor estabelecem uma conexão bem-sucedida, um novo socket será retornado
while True :
new_client , ip_port = tcp_server_socket.accept ( ) _
sub_thresd = threading . Thread ( target = handle , args = ( ip_port , new_client ))
sub_thresd.start ( ) _


# 7. Fechar o socket
tcp_server_socket.close ( ) _


Aviso de direitos autorais: O conteúdo deste artigo é contribuído por usuários registrados com nome real da Alibaba Cloud. Os direitos autorais pertencem ao autor original. A Comunidade de desenvolvedores Alibaba Cloud não detém os direitos autorais e não assume a responsabilidade legal correspondente. Para regras específicas, consulte o "Acordo de Serviço do Usuário da Comunidade de Desenvolvedores Alibaba Cloud" e as "Diretrizes de Proteção à Propriedade Intelectual da Comunidade de Desenvolvedores Alibaba Cloud". Se você encontrar qualquer conteúdo suspeito de plágio nesta comunidade, preencha o formulário de reclamação de infração para denunciá-lo. Uma vez verificado, esta comunidade excluirá imediatamente o conteúdo supostamente infrator.

Artigos relacionados

Explorar mais ofertas especiais

  1. Short Message Service (SMS) e Serviço de E-mail

    Pacote de 50.000 e-mails a partir de apenas USD 1,99; 120 mensagens curtas a partir de apenas USD 1,00

phone Fale Conosco
Oi, eu sou o assistente de IA da Alibaba Cloud!
Posso ajudar com perguntas e soluções.