Compare commits
17 Commits
54b6b0d484
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 335d1c4645 | |||
| 011ea38fa8 | |||
| 7bf610845a | |||
| 322f5f37dd | |||
| 58d4d0b6e5 | |||
| 3fafa79fbf | |||
| 9502340895 | |||
| 40e9d97a8a | |||
| bcd4801dfc | |||
| 6723e01b20 | |||
| b67b419e1b | |||
| d4a4ce90cb | |||
| 8babc75ad0 | |||
| 548ea411b9 | |||
| d2961f970e | |||
| 30dee225de | |||
| f715cb7c7d |
@@ -0,0 +1 @@
|
|||||||
|
modulo_os/__pycache__
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
#Tipo de formatação 1
|
||||||
|
nome = "Procopio"
|
||||||
|
classificacao = 1
|
||||||
|
resultado = "Aluno aprovado:" + nome + " Class" + str(classificacao)
|
||||||
|
print(resultado)
|
||||||
|
|
||||||
|
#Tipo de formatação 2
|
||||||
|
mensagem = "Conectando Ip %s na porta %d" % ("192.168.0.1",45)
|
||||||
|
print(mensagem)
|
||||||
|
|
||||||
|
#Tipo de formatação 3
|
||||||
|
mensagem = "Conectando {} na porta {}".format("10.200.103.109", 82)
|
||||||
|
print(mensagem)
|
||||||
|
|
||||||
|
#Tipo de formatação 4
|
||||||
|
ip = "10.200.109.103"
|
||||||
|
porta = 1521
|
||||||
|
mensagem = f"Endereco IP: {ip} e porta {porta}"
|
||||||
|
print (mensagem)
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
#Tipo de lista 1 - lista = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
|
||||||
|
lista = []
|
||||||
|
for i in range (10):
|
||||||
|
lista.append(i)
|
||||||
|
print(lista)
|
||||||
|
|
||||||
|
#Tipo de lista 2 - [operacao for i in lista]
|
||||||
|
lista = [i for i in range(10)]
|
||||||
|
lista = [i*2 for i in range(100)]
|
||||||
|
lista = [f"192.168.0.{i}" for i in range(255)]
|
||||||
|
print (lista)
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
a = 20
|
||||||
|
a = 3.1415
|
||||||
|
nome = "Simon"
|
||||||
|
total = 4596
|
||||||
|
resultado = 45.45
|
||||||
|
logico = True
|
||||||
|
|
||||||
|
print(type(a))
|
||||||
|
print(type(nome))
|
||||||
|
print(type(total))
|
||||||
|
print(type(resultado))
|
||||||
|
print(type(logico))
|
||||||
|
|
||||||
|
|
||||||
|
#Definição de funções em Python
|
||||||
|
def somar (a,b):
|
||||||
|
soma = a + b
|
||||||
|
return soma
|
||||||
|
|
||||||
|
print (somar(7,9))
|
||||||
|
|
||||||
|
def somarTipado(a: int, b: int) -> int:
|
||||||
|
return a + b
|
||||||
|
|
||||||
|
print (somarTipado(45, 45))
|
||||||
|
|
||||||
|
"""
|
||||||
|
from socket import socket
|
||||||
|
|
||||||
|
socket.accept()
|
||||||
|
"""
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
port=5000
|
||||||
|
|
||||||
|
DB_HOST=
|
||||||
|
DB_USER=root
|
||||||
|
DB_PASSWORD=
|
||||||
|
DB_NAME=loja_redes
|
||||||
|
DB_PORT=3306
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
.venv/
|
||||||
|
.env
|
||||||
Binary file not shown.
@@ -0,0 +1,79 @@
|
|||||||
|
from flask import Flask, jsonify, request
|
||||||
|
from flask_cors import CORS
|
||||||
|
import os
|
||||||
|
from dotenv import load_dotenv
|
||||||
|
from db import get_connection
|
||||||
|
|
||||||
|
#Carrega arquivo de variáveis de ambiente (.env)
|
||||||
|
load_dotenv()
|
||||||
|
#Carrega variável de ambiente PORT. Essa variável contém a porta TCP utilizada na APIREST
|
||||||
|
PORT = os.getenv("PORT")
|
||||||
|
|
||||||
|
#Cria objeto Flask. Esse objeto é necessário para utilização do FLASK
|
||||||
|
#(módulo python para criação de APIs REST).
|
||||||
|
app = Flask(__name__)
|
||||||
|
#Aplica cors no objeto Flask
|
||||||
|
CORS(app)
|
||||||
|
|
||||||
|
#Criar rota de saúde da aplicação
|
||||||
|
@app.route("/health")
|
||||||
|
def health():
|
||||||
|
return jsonify({"message" : "API Flask version 1.0!!!"})
|
||||||
|
|
||||||
|
#=============================================================
|
||||||
|
|
||||||
|
@app.route("/produtos",methods=["GET"])
|
||||||
|
def listar_produtos():
|
||||||
|
conexao = get_connection()
|
||||||
|
cursor = conexao.cursor(dictionary=True)
|
||||||
|
|
||||||
|
cursor.execute("select * from produto")
|
||||||
|
produtos = cursor.fetchall()
|
||||||
|
|
||||||
|
cursor.close()
|
||||||
|
conexao.close()
|
||||||
|
|
||||||
|
return jsonify(produtos)
|
||||||
|
|
||||||
|
#=============================================================
|
||||||
|
|
||||||
|
@app.route("/produtos/<int:id>", methods=["GET"])
|
||||||
|
def listar_produto_id(id):
|
||||||
|
conexao = get_connection()
|
||||||
|
cursor = conexao.cursor(dictionary=True)
|
||||||
|
|
||||||
|
cursor.execute("Select * from produto where id = %s", (id,))
|
||||||
|
produto = cursor.fetchone()
|
||||||
|
|
||||||
|
cursor.close()
|
||||||
|
conexao.close()
|
||||||
|
|
||||||
|
if produto is None:
|
||||||
|
return jsonify({"erro" : "Produto não encontrado"}), 404
|
||||||
|
|
||||||
|
return jsonify(produto)
|
||||||
|
|
||||||
|
#=============================================================
|
||||||
|
|
||||||
|
@app.route("/produtos",methods=["POST"])
|
||||||
|
def criar_produto():
|
||||||
|
dados = request.get_json()
|
||||||
|
nome = dados.get("nome")
|
||||||
|
preco = dados.get("preco")
|
||||||
|
estoque = dados.get("estoque")
|
||||||
|
if nome is None or preco is None or estoque is None:
|
||||||
|
return jsonify({"erro" : "Produto inválido"}), 400
|
||||||
|
conexao = get_connection()
|
||||||
|
cursor = conexao.cursor()
|
||||||
|
sql = "insert into produto (nome, preco, estoque) values (%s, %s, %s)"
|
||||||
|
cursor.execute(sql,(nome, preco, estoque))
|
||||||
|
conexao.commit()
|
||||||
|
novo_id = cursor.lastrowid
|
||||||
|
cursor.close()
|
||||||
|
conexao.close()
|
||||||
|
return jsonify({"id" : novo_id, "nome": nome, "preco" : preco, "estoque" : estoque}), 201
|
||||||
|
|
||||||
|
|
||||||
|
#Inicializa o servidor da APIRest
|
||||||
|
if __name__ == "__main__":
|
||||||
|
app.run(port=PORT, debug=True)
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
import os
|
||||||
|
import mysql.connector
|
||||||
|
from dotenv import load_dotenv
|
||||||
|
|
||||||
|
load_dotenv()
|
||||||
|
|
||||||
|
def get_connection():
|
||||||
|
return mysql.connector.connect(
|
||||||
|
host=os.getenv("DB_HOST"),
|
||||||
|
user=os.getenv("DB_USER"),
|
||||||
|
password=os.getenv("DB_PASSWORD"),
|
||||||
|
database=os.getenv("DB_NAME"),
|
||||||
|
port=os.getenv("DB_PORT")
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
blinker==1.9.0
|
||||||
|
click==8.3.3
|
||||||
|
colorama==0.4.6
|
||||||
|
Flask==3.1.3
|
||||||
|
flask-cors==6.0.2
|
||||||
|
itsdangerous==2.2.0
|
||||||
|
Jinja2==3.1.6
|
||||||
|
MarkupSafe==3.0.3
|
||||||
|
mysql-connector-python==9.7.0
|
||||||
|
python-dotenv==1.2.2
|
||||||
|
Werkzeug==3.1.8
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
#Criar tabela produto
|
||||||
|
create table produto (
|
||||||
|
id int auto_increment primary key,
|
||||||
|
nome varchar(100) not null,
|
||||||
|
preco decimal(10,2) not null,
|
||||||
|
estoque int not null
|
||||||
|
);
|
||||||
|
|
||||||
|
#Carga incial do banco
|
||||||
|
insert into produto (nome,preco,estoque)
|
||||||
|
values ('Bola',12.50,10);
|
||||||
|
insert into produto (nome,preco,estoque)
|
||||||
|
values ('PS5',3950.50,5);
|
||||||
|
|
||||||
|
#Exemplo de consulta
|
||||||
|
#select * from produto;
|
||||||
Binary file not shown.
@@ -0,0 +1,18 @@
|
|||||||
|
import os
|
||||||
|
import utilities
|
||||||
|
import sys
|
||||||
|
|
||||||
|
endereco = input("Digite um endereço IP: ")
|
||||||
|
|
||||||
|
if not utilities.validar_ip(endereco):
|
||||||
|
print ("O endereço IP é inválido.")
|
||||||
|
sys.exit(0)
|
||||||
|
|
||||||
|
comando = f"ping {endereco}"
|
||||||
|
|
||||||
|
resultado = os.system(comando)
|
||||||
|
|
||||||
|
if not resultado:
|
||||||
|
print("O endereço existe")
|
||||||
|
else:
|
||||||
|
print("O endereço não existe")
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
import os
|
||||||
|
print (os.name)
|
||||||
|
|
||||||
|
print (os. getcwd())
|
||||||
|
|
||||||
|
print(os.environ)
|
||||||
|
|
||||||
|
print(os.path)
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
def validar_ip (ip : str) -> bool:
|
||||||
|
octetos = ip.split(".")
|
||||||
|
if len(octetos) != 4:
|
||||||
|
return False
|
||||||
|
for octeto in octetos :
|
||||||
|
if int (octeto) <0 or int(octeto) > 255:
|
||||||
|
return False
|
||||||
|
return True
|
||||||
@@ -0,0 +1,44 @@
|
|||||||
|
import tkinter as tk
|
||||||
|
from tkinter import scrolledtext
|
||||||
|
import socket
|
||||||
|
import threading
|
||||||
|
|
||||||
|
def ouvir_servidor(socket_servidor):
|
||||||
|
while True:
|
||||||
|
mensagem = socket_servidor.recv(80000)
|
||||||
|
area_mensagens.config(state="normal")
|
||||||
|
area_mensagens.insert(tk.END, mensagem.decode() + "\n")
|
||||||
|
area_mensagens.config(state="disabled")
|
||||||
|
|
||||||
|
socket_servidor = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||||
|
socket_servidor.connect(("10.209.1.45",5000))
|
||||||
|
|
||||||
|
thread = threading.Thread(target=ouvir_servidor, args=[socket_servidor,])
|
||||||
|
thread.start()
|
||||||
|
|
||||||
|
janela = tk.Tk()
|
||||||
|
janela.title("Chat do IFRN")
|
||||||
|
|
||||||
|
rotulo_mensagem = tk.Label(janela, text="Digite sua mensagem")
|
||||||
|
rotulo_mensagem.pack()
|
||||||
|
|
||||||
|
entrada_mensagem = tk.Entry(janela, width=80)
|
||||||
|
entrada_mensagem.pack()
|
||||||
|
|
||||||
|
def clicar():
|
||||||
|
mensagem = entrada_mensagem.get()
|
||||||
|
print(mensagem)
|
||||||
|
socket_servidor.send(mensagem.encode())
|
||||||
|
entrada_mensagem.delete(0, tk.END)
|
||||||
|
area_mensagens.config(state="normal")
|
||||||
|
area_mensagens.insert(tk.END, mensagem + "\n")
|
||||||
|
area_mensagens.config(state="disabled")
|
||||||
|
|
||||||
|
botao = tk.Button(janela, text="Enviar", command=clicar)
|
||||||
|
botao.pack()
|
||||||
|
|
||||||
|
area_mensagens = scrolledtext.ScrolledText(janela)
|
||||||
|
area_mensagens.pack()
|
||||||
|
area_mensagens.config(state="disabled")
|
||||||
|
|
||||||
|
janela.mainloop()
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
#Modelo diferente de importação, não precisa utilizar a palavra socket (módulo) antes dos recursos
|
||||||
|
from socket import *
|
||||||
|
|
||||||
|
#Criar objeto socket
|
||||||
|
cliente = socket(AF_INET,SOCK_STREAM)
|
||||||
|
|
||||||
|
#Abrir conexão
|
||||||
|
conexao = cliente.connect(("10.209.1.45",3000))
|
||||||
|
|
||||||
|
#Enviar mensagem
|
||||||
|
cliente.send("Olá, servidor! Aqui é o Simon".encode())
|
||||||
|
|
||||||
|
#
|
||||||
|
mensagem = cliente.recv(1024)
|
||||||
|
print(f"Mensagem recebida {mensagem.decode()}")
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
import socket
|
||||||
|
import threading
|
||||||
|
|
||||||
|
servidor = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||||
|
servidor.bind(("0.0.0.0",5000))
|
||||||
|
servidor.listen()
|
||||||
|
print("Servidor inicializado!!!")
|
||||||
|
|
||||||
|
clientes = []
|
||||||
|
|
||||||
|
def ouvir_cliente(cliente):
|
||||||
|
while True:
|
||||||
|
try:
|
||||||
|
mensagem = cliente.recv(8000)
|
||||||
|
for socket_cliente in clientes:
|
||||||
|
if socket_cliente != cliente:
|
||||||
|
socket_cliente.send(mensagem)
|
||||||
|
except Exception as e:
|
||||||
|
print(f"Ocorreu um erro inesperado: {e}")
|
||||||
|
return
|
||||||
|
|
||||||
|
while True:
|
||||||
|
cliente, endereco_cliente = servidor.accept()
|
||||||
|
print("Cliente conectado:", endereco_cliente)
|
||||||
|
clientes.append(cliente)
|
||||||
|
thread = threading.Thread(target=ouvir_cliente, args=[cliente,])
|
||||||
|
thread.start()
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
#Biblioteca padrão para utilização de sockets
|
||||||
|
import socket
|
||||||
|
|
||||||
|
#Criar um objeto socket com AF_INET (IPV4) e SOCK_STREAM (TCP)
|
||||||
|
servidor = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||||
|
|
||||||
|
#Estabelecer vinculo com endereço e uma porta
|
||||||
|
servidor.bind(("127.0.0.1",3000))
|
||||||
|
|
||||||
|
print("Servidor inicializando...")
|
||||||
|
|
||||||
|
#Começa a ouvir tentativas de conexão
|
||||||
|
servidor.listen()
|
||||||
|
|
||||||
|
#Aceitar a conexão, recebendo o objeto socket da conexão e o endereço de quem se conectou
|
||||||
|
conexao, endereco = servidor.accept()
|
||||||
|
|
||||||
|
#Recebendo mensagem do cliente. Tenho que converter bytes para string
|
||||||
|
mensagem = conexao.recv(1024).decode()
|
||||||
|
print(f"mensagem recebida: {mensagem}")
|
||||||
|
|
||||||
|
#Enviar mensagem. Precisa ser em bytes (decode)
|
||||||
|
conexao.send("Ok, mensagem recebida com sucesso!".encode( ))
|
||||||
|
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
import threading
|
||||||
|
import time
|
||||||
|
|
||||||
|
#Função que será executada pela thread
|
||||||
|
def executar (nome_thread, n_iteracoes):
|
||||||
|
for i in range(n_iteracoes):
|
||||||
|
print (f"Nome da thread: {nome_thread}")
|
||||||
|
time.sleep(2) #Parar por 2s
|
||||||
|
|
||||||
|
t1 = threading.Thread(target=executar,args=["Thread1",15])
|
||||||
|
t2 = threading.Thread(target=executar,args=["Thread2",10])
|
||||||
|
|
||||||
|
t1.start()
|
||||||
|
t2.start()
|
||||||
|
|
||||||
|
t1.join()
|
||||||
|
t2.join()
|
||||||
|
|
||||||
|
print("Final da thread principal!")
|
||||||
Reference in New Issue
Block a user