You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: content/upload-de-arquivos-com-socket-e-struct.md
+11-11Lines changed: 11 additions & 11 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -10,12 +10,12 @@ Linkedin: SilvioApSilva
10
10
Twitter: @kanazux
11
11
Site: http://kanazuchi.com
12
12
13
-
Apesar de termos muitas formas de enviarmos arquivos para servidores hoje em dia, como por exemplo o *scp* e *rsync*, podemos usar o python com seus modulos*built-in* para enviar arquivos a servidores usando struct para serializar os dados e socket para criar uma conexão cliente/servidor.
13
+
Apesar de termos muitas formas de enviarmos arquivos para servidores hoje em dia, como por exemplo o *scp* e *rsync*, podemos usar o python com seus módulos*built-in* para enviar arquivos a servidores usando struct para serializar os dados e socket para criar uma conexão cliente/servidor.
14
14
15
15
### *Struct*
16
16
17
-
O modulo[struct](https://docs.python.org/3/library/struct.html) é usado para converter bytes no python em formatos do struct em C.
18
-
Com ele podemos enviar num unico conjunto de dados o nome de um arquivo e os bytes referentes ao seus dados.
17
+
O módulo[struct](https://docs.python.org/3/library/struct.html) é usado para converter bytes no python em formatos do struct em C.
18
+
Com ele podemos enviar num único conjunto de dados o nome de um arquivo e os bytes referentes ao seus dados.
19
19
20
20
Struct também é utilizado para serializar diversos tipos de dados diferentes, como bytes, inteiros, floats além de outros, no nosso caso usaremos apenas bytes.
21
21
@@ -38,7 +38,7 @@ with open(arquivo, 'rb') as arq:
Por padrão, struct usa caracteres no inicio da sequencia dos dados para definir a ordem dos bytes, tamanho e alinhamento dos bytes nos dados empacotados.
41
+
Por padrão, struct usa caracteres no início da sequência dos dados para definir a ordem dos bytes, tamanho e alinhamento dos bytes nos dados empacotados.
42
42
Esses caracteres podem ser vistos na [seção 7.1.2.1](https://docs.python.org/3/library/struct.html#byte-order-size-and-alignment) da documentação.
43
43
Como não definimos, será usado o **@** que é o padrão.
44
44
@@ -75,8 +75,8 @@ O modulo [socket](https://docs.python.org/3/library/socket.html) prove interface
75
75
76
76
#### Familias de sockets
77
77
78
-
Diversas familias de sockets podem ser usadas para termos acessos a objetos que nos permitam fazer chamadas de sistema.
79
-
Mais informações sobre as familias podem ser encontradas na [seção 18.1.1](https://docs.python.org/3/library/socket.html#socket-families) da documentação. No nosso exemplo usaremos a AF_INET.
78
+
Diversas famílias de sockets podem ser usadas para termos acessos a objetos que nos permitam fazer chamadas de sistema.
79
+
Mais informações sobre as famílias podem ser encontradas na [seção 18.1.1](https://docs.python.org/3/library/socket.html#socket-families) da documentação. No nosso exemplo usaremos a AF_INET.
80
80
81
81
#### AF_INET
82
82
@@ -85,7 +85,7 @@ Para endereços IPv6 o modulo disponibiliza o **AF_INET6**
85
85
86
86
#### Constante [SOCK_STREAM]
87
87
88
-
As constantes representam as familias de sockets, como a constante AF_INET e os protocolos usados como parametros para o modulo socket.
88
+
As constantes representam as famílias de sockets, como a constante AF_INET e os protocolos usados como parâmetros para o modulo socket.
89
89
Um dos protocolos mais usados encontrados na maioria dos sistemas é o SOCK_STREAM.
90
90
91
91
Ele é um protocolo baseado em comunicação que permite que duas partes estabeleçam uma conexão e conversem entre si.
Agora usaremos o metodo bind para criarmos um ponto de conexão para nosso cliente. Esse metodo espera por uma tupla contento o host e porta como parametros.
110
+
Agora usaremos o metodo bind para criarmos um ponto de conexão para nosso cliente. Esse método espera por uma tupla contento o host e porta como parâmetros.
111
111
112
112
```python
113
113
sock.bind((host, porta))
114
114
```
115
115
116
-
Agora vamos colocar nosso servidor socket em modo escuta com o metodo listen. Esse metodo recebe como parametro um numero inteiro (**backlog**) definindo qual o tamanho da fila que será usada para receber pacotes SYN até dropar a conexão. Usaremos um valor baixo o que evita SYN flood na rede. Mais informações sobre *backlog* podem ser encontradas na [RFC 7413](https://tools.ietf.org/html/rfc7413).
116
+
Agora vamos colocar nosso servidor socket em modo escuta com o metodo listen. Esse método recebe como parâmetro um número inteiro (**backlog**) definindo qual o tamanho da fila que será usada para receber pacotes SYN até dropar a conexão. Usaremos um valor baixo o que evita SYN flood na rede. Mais informações sobre *backlog* podem ser encontradas na [RFC 7413](https://tools.ietf.org/html/rfc7413).
117
117
118
118
```python
119
119
sock.listen(5)
120
120
```
121
121
122
-
Agora vamos colocar o nosso socket em um loop esperando por uma conexão e um inicio de conversa. Pra isso vamos usar o metodo *accept* que nos devolve uma tupla, onde o primeiro elemento é um novo objeto socket para enviarmos e recebermos informações, e o segundo contendo informações sobre o endereço de origem e porta usada pelo cliente.
122
+
Agora vamos colocar o nosso socket em um loop esperando por uma conexão e um início de conversa. Pra isso vamos usar o metodo *accept* que nos devolve uma tupla, onde o primeiro elemento é um novo objeto socket para enviarmos e recebermos informações, e o segundo contendo informações sobre o endereço de origem e porta usada pelo cliente.
123
123
124
124
**Vamos criar um diretório para salvar nosso novo arquivo.**
125
125
@@ -162,7 +162,7 @@ while True:
162
162
163
163
> Cliente
164
164
165
-
Nosso cliente irá usar o metodo *connect* para se connectar no servidor e a partir dai começar enviar e receber mensagens. Ele também recebe como parametros uma tupla com o host e porta de conexão do servidor.
165
+
Nosso cliente irá usar o metodo *connect* para se conectar no servidor e a partir dai começar enviar e receber mensagens. Ele também recebe como parâmetros uma tupla com o host e porta de conexão do servidor.
0 commit comments