Latest web development tutorials

Programação Python Rede

Python oferece dois níveis de serviços de rede de acesso. :

  • serviços de rede de baixo nível para apoiar soquete básico, que fornece um padrão BSD Sockets API, você pode acessar todos os métodos da interface soquete sistema operacional subjacente.
  • Um alto nível de módulo de serviço de rede SocketServer, ele fornece uma classe de servidor central, você pode simplificar o desenvolvimento do servidor de rede.

O que é soquete?

Tomada também conhecida como "encaixe", a aplicação é normalmente emitido por um "encaixe" ao pedido de rede ou rede de resposta de pedido, de modo que o processo entre os hospedeiros ou entre um computador pode comunicar.


função socket ()

Python, usamos a função socket () para criar um socket, a sintaxe é a seguinte:

socket.socket([family[, type[, proto]]])

parâmetros

  • familiar: a família pode fazer uma tomada ou AF_INET AF_UNIX
  • Tipo: tipo de soquete pode ser orientado por conexão ou sem conexão em SOCK_STREAM ou SOCK_DGRAM
  • Protocolo: Em geral não preencher o padrão é zero.

Tomada de objeto (built-in) Método

função descrição
soquete de servidor
s.bind () endereço (host, porta) à tomada na AF_INET, sob a forma de uma tupla (host, porta) indica o endereço.
s.listen () Comece TCP ouvindo. backlog especificado antes de rejeitar a conexão, o sistema operacional pode suspender o número máximo de conexões. Este valor é, pelo menos, um, a maioria das aplicações pode ser ajustado para 5.
s.accept () A aceitação passiva de conexões de clientes TCP (bloqueio) aguardando a chegada de
socket cliente
s.connect () Ativo inicializar ligações de servidor TCP. Endereço geral do formato de tuplas (hostname, porta), se o erro de conexão, é devolvido um erro socket.error.
s.connect_ex () connect () versão estendida da função retorna um código de erro quando um erro ao invés de lançar uma exceção
soquete funções fins públicos
s.recv () Receber dados TCP, os dados são retornados como uma string, especificar a quantidade máxima de dados a ser recebido bufsize. Fornecer informações adicionais sobre o sinalizador de mensagem geralmente podem ser ignorados.
s.send () Enviar dados TCP, envia a cadeia de dados para a conexão de soquete. O valor de retorno é o número de bytes a serem enviados, este número pode ser menor do que a cadeia de bytes.
s.sendall () Completas dados TCP envio, dados completos de transmissão TCP. Ele envia a cadeia de dados para a conexão de soquete, mas antes de retornar tentará enviar todos os dados. Bem-sucedido retorno Nenhum, exceção falha é lançada.
s.recvform () Receber dados UDP () é semelhante ao recv, mas o valor de retorno é (dados, endereço). Em que os dados é uma string contendo os dados recebidos, os dados de endereço é enviado endereço de soquete.
s.sendto () Enviar dados UDP, enviar dados para um socket, o endereço é na forma de (ipaddr, porta) tupla especificada endereço remoto. O valor de retorno é o número de bytes enviados.
s.close () Fechar o socket
s.getpeername () Retorna o endereço remoto tomada de ligação. O valor de retorno é geralmente uma tupla (ipaddr, porta).
s.getsockname () Retorna próprio endereço do socket. Normalmente, uma tupla (ipaddr, porta)
s.setsockopt (nível, optname, value) Defina o valor de uma determinada opção de soquete.
s.getsockopt (nível, optname [.buflen]) O valor de retorno da opção tomada.
s.settimeout (timeout) Set operação de soquete período de tempo limite, tempo limite é um número de ponto flutuante, em segundos. Nenhum valor indica que não há período de tempo limite. Geralmente, o período de tempo limite deve apenas criar um conjunto de soquete, porque eles podem ser usados ​​para operar a conexão (como o connect ())
s.gettimeout () Retorna o valor do período de tempo limite atual, em segundos, se não houver nenhum período de tempo limite definido, retorna Nenhum.
s.fileno () Retorna um descritor de arquivo de socket.
s.setblocking (bandeira) Se a bandeira é 0, o soquete é configurado para o modo não-bloqueio, caso contrário, o soquete para o modo de bloqueio (o valor padrão). modo sem bloqueio, se você chamar recv () não encontrou quaisquer dados, ou enviar call () não pode enviar imediatamente os dados, causaria socket.error exceção.
s.makefile () Criar uma documentos relevantes em conexão com o soquete

Um exemplo simples

o servidor

Nós usamos a função de encaixe do módulosocket para criar um objeto de socket.Tomada objeto pode chamar outras funções para configurar um serviço de soquete.

Agora podemos especificar os serviços chamandoligamentoportafunção (hostname, porta)(porta).

Em seguida, chamamos o método aceitode objetos de soquete. O método de espera para a ligação do cliente e retornar objecto deligaçãoque representa conectado ao cliente.

O código completo é como segue:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
# 文件名:server.py

import socket               # 导入 socket 模块

s = socket.socket()         # 创建 socket 对象
host = socket.gethostname() # 获取本地主机名
port = 12345                # 设置端口
s.bind((host, port))        # 绑定端口

s.listen(5)                 # 等待客户端连接
while True:
    c, addr = s.accept()     # 建立客户端连接。
    print '连接地址:', addr
    c.send('欢迎访问本教程!')
    c.close()                # 关闭连接

cliente

Em seguida nós escrever um cliente simples para conectar-se as instâncias de serviço criados anteriormente. número da porta é 12345.

Socket.connect (hosname, porta) método abre uma conexão TCP com o host para a portahostnamepara prestadores de serviços portuários.Uma vez ligado podemos pós-dados a partir do servidor, lembrar, após a conclusão da operação precisa de fechar a ligação.

O código completo é como segue:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
# 文件名:client.py

import socket               # 导入 socket 模块

s = socket.socket()         # 创建 socket 对象
host = socket.gethostname() # 获取本地主机名
port = 12345                # 设置端口好

s.connect((host, port))
print s.recv(1024)
s.close()  

Agora temos até para abrir o terminal, o primeiro terminal realiza arquivo server.py:

$ python server.py

O segundo terminal realiza arquivo client.py:

$ python client.py 
欢迎访问本教程!

Este é o nosso primeiro e, em seguida, abrir um terminal, você verá a seguinte informação é de saída:

连接地址: ('192.168.0.118', 62461)

módulos de Internet Python

Aqui estão alguns importantes programação módulo de rede Python:

acordo função útil Número da porta Módulos Python
HTTP acesso à web 80 httplib, urllib, xmlrpclib
NNTP Ler e publicar artigos de notícias, conhecido como o "post" 119 nntplib
FTP File Transfer 20 ftplib, urllib
SMTP Enviar e-mail 25 smtplib
POP3 receber e-mails 110 poplib
IMAP4 obter e-mail 143 imaplib
Telnet Linha de comando 23 telnetlib
Gopher Encontre informações 70 gopherlib, urllib

Mais detalhes podem ser encontrados no site oficial do Python da Biblioteca soquete e os módulos .