Skip to content

Versão em GO lang da implementação de um protocolo confiável sobre uma uma camada não confiável

Notifications You must be signed in to change notification settings

exatasmente/go-udp2tcp

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 

Repository files navigation

Feito com ♥ + ☕ em GO

UDP2TCP

Exsitem duas aplicações

Servidor

Cliente

E uma biblioteca

UDP2TCPLib

imports

fmt : biblioteca para chamadas de output (print) encoding/binary : biblioteca para manipulação de bits e conversão de dados sync : biblioteca para controle de concorrência (mutex), e condições de corrida

Para compilar

A aplicação consiste em 2 programas diferentes e uma biblioteca para realizar a compilação é necessário ter a linguagem go instalada

comandos para montar o ambiente de desenvolvimento

export GOLANG= exemplo : export GOLANG=C:/Users/luiz/redes/udp2tcp

Comandos em go para compilar e montar o pacote udp2tcplib

go build redes/udp2tcplib go install redes/udp2tcplib

Comandos para compilar a aplicação cliente e servidor

go install redes/udp2tcp/client go install redes/udp2tcp/server

Para executar

Cliente

./client.exe

Servidor

./server.exe <diretório para salvar>

Estruturas:

//UDP2TcpPacket Representação do pacote enviado pela rede
type UDP2TcpPacket struct {
	TCPHeader
	Data []byte
}

//UDP2TcpSocket Representação do Socket para a biblioteca
type UDP2TcpSocket struct {
	conn *net.UDPConn
	Type UDP2TcpType
}

//UDP2TcpConnState Estrutura para controle do estado do conexão
type UDP2TcpConnState struct {
	mux        sync.Mutex
	readChan   chan UDP2TcpPacket
	writeChan  chan []byte
	socketChan chan UDP2TcpPacket
	fileSize   chan int
	SSTHRESH   int
	CWND       int
	window     []uint32
}

//UDP2TcpConn representação da conexão com o servidor
type UDP2TcpConn struct {
	TCPHeader
	UDP2TcpConnState
	addr *net.UDPAddr
	file map[int][]byte
}

//UDP2Tcp Estrutura base para controle da biblioteca
type UDP2Tcp struct {
	UDP2TcpSocket
}

Procedimentos

utils.go

func (packet UDP2TcpPacket) isValid() bool

Entrada : estrutura UDP2TcpPacket Saida : true para as flags definidas, false caso contrário Verifica se as flags do pacote estão definidas

func (packet UDP2TcpPacket) hasPayload() bool

Entrada : estrutura UDP2TcpPacket Saida : true caso o pacote tenha carga, false caso contrário Verifica se o pacote tem carga, ou seja, se o tamanho do vetor de dados é maior que 0

func (conn UDP2TcpConn) Write(file []byte)

Entrada : vetor de bytes Procedimento de alto nivél para enviar o arquvio ao servidor

func (conn UDP2TcpConn) Read() []byte 

Saída : vetor de bytes, arquivo enviado pelo cliente Procedimento de alto nivél para recebimento de arquivos do cliente

func dump(buf []byte, rlen int, addr *net.UDPAddr) UDP2TcpPacket

Entrada : vetor de bytes, tamanho do vetor, endereço ip Saída : esturutura UDP2TcpPacket Função responsável por converter os dados enviados pela rede para a representação do dado na aplicação

func buildPacket(seqNum, ackNum uint32, connID uint16, ACK, SYN, FIN bool, data []byte) UDP2TcpPacket
func serializePacket(tcpPacket UDP2TcpPacket) []byte
func bool2Binary(packet UDP2TcpPacket) byte
func binaryToBool(flags byte) (bool, bool, bool)

About

Versão em GO lang da implementação de um protocolo confiável sobre uma uma camada não confiável

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages