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
A aplicação consiste em 2 programas diferentes e uma biblioteca para realizar a compilação é necessário ter a linguagem go instalada
export GOLANG= exemplo : export GOLANG=C:/Users/luiz/redes/udp2tcp
go build redes/udp2tcplib go install redes/udp2tcplib
go install redes/udp2tcp/client go install redes/udp2tcp/server
./client.exe
./server.exe <diretório para salvar>
//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
}
func (packet UDP2TcpPacket) isValid() boolEntrada : 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() boolEntrada : 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() []byteSaí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) UDP2TcpPacketEntrada : 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) UDP2TcpPacketfunc serializePacket(tcpPacket UDP2TcpPacket) []byte
func bool2Binary(packet UDP2TcpPacket) byte
func binaryToBool(flags byte) (bool, bool, bool)