HOMECOURSESSTUDENTSDONATIONSVIDEOSEVENTSTUTORIALSLINKSNEWSCONTACT


TUTORIALS 》 Código de soquete de amostra UDP para desenvolvedores de software de sistemas e redes

Língua :: Inglês

Aqui está o meu exemplo de código de soquete UDP escrito em C. Ao contrário de outras versões, você obtém em comum, esta versão é focada em sistemas e desenvolvedores de software de rede e como uma referência rápida, mesmo para programadores de software experientes. Neste exemplo / modelo, estou enviando bytes de dados binários crus de teste do cliente de exemplo UDP para o servidor de amostra UDP registrado. O código já possui documentação na forma de comentários (como você pode ver abaixo). Você pode baixar minha fonte abaixo e você pode usá-lo diretamente em seus projetos ou pode usar o mesmo para fins de aprendizagem para entender sobre programação de soquete de espaço para usuário via protocolo de camada de transporte IPv4 UDP.

O UDP é muito exclusivo, versátil e flexível ao contrário do TCP, portanto, isso pode ser usado como mecanismo interno do dispositivo IPC, em vez disso, usando plataformas mais tradicionais, como filas de mensagens, pipes, etc. Ao contrário de outros mecanismos de IPC, isso fornece um modo transparente a prova de falhas para depurar seu software através da captura de pacotes Wireshark e permite que você consiga corrigir os problemas passando pelos dados de captura de pacotes binários em bruto.

UDP como uma futura plataforma de comunicação de rede de alta velocidade: UDP também é experimentado para ser usado como um protocolo de carreira de comunicação de alta velocidade ao contrário do TCP. TCP restringe a rede avançada Arquitetos de software para usar o TCP proporcionaram controle de congestionamento, seqüência de pacotes fora de ordem, recursos. Mas UDP fornece um acesso bruto para a rede, para que os usuários avançados possam arquitetar esses utilitários no espaço de usuário, protocolo (s) da camada de aplicação. Por exemplo Para os mesmos motivos óbvios, o Google inventou o protocolo QUIC, que usa o UDP como seu protocolo de carreira no navegador Chrome do Google em vez disso Protocolo HTTPS / SSL baseado em TCP. A QUIC possui sua própria camada de confiabilidade de camada de aplicação de espaço de usuário que garante situações como perda de pacotes, segurança, controle de congestionamento e assim por diante. E com o QUIC Google também pode multiplexar várias conexões / sessões remotas em um único canal de comunicação, melhorando o desempenho da rede e a experiência do usuário.

Aqui está o meu vídeo de demonstração ao vivo muito detalhado do mesmo, se você estiver interessado, observe gentilmente meu vídeo para que você possa obter o perspectiva maior. Eu também discuti todos os pontos acima em profundidade.

Aqui está o meu código fonte do meu cliente de soquete UDP de teste. Download: udp_socket_client.c

/* udp_socket_client.c
 * The Linux Channel
 * Author: Kiran Kankipati
 * Updated: 01-Feb-2017
 */

#include <stdio.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>

#define MAXBUF 1024

int main()
{ int sockfd, len, i;
  unsigned char buf[MAXBUF];
  struct sockaddr_in udp_server_addr;
  socklen_t addr_size;

  sockfd = socket(PF_INET, SOCK_DGRAM, 0); // create a UDP socket
  if(sockfd<=0) { printf("socket error !\n"); return 0; }

  /* configure settings to communicate with remote UDP server */
  udp_server_addr.sin_family = AF_INET;
  udp_server_addr.sin_port = htons(6800); // server port
  udp_server_addr.sin_addr.s_addr = inet_addr("127.0.0.1"); // local-host
  memset(udp_server_addr.sin_zero, '\0', sizeof udp_server_addr.sin_zero);  
  addr_size = sizeof udp_server_addr;

  memset(buf, 0xab, MAXBUF); // set the entire buffer with 0xab (i.e 1010 1011 binary)

  sendto(sockfd, buf, MAXBUF, 0, (struct sockaddr *)&udp_server_addr, addr_size); //send the data to server
  
  len = recvfrom(sockfd, buf, MAXBUF, 0, NULL, NULL); // receive data from server
  
  printf("Received from server: %d bytes\n", len); for(i=0;i<len;i++) { printf("%02x ", buf[i]); } printf("\n"); //print received data dump

  close(sockfd); //close socket file-descriptor
  
  return 0;
}

Compile the udp_socket_client.c:

[email protected]:/code/thelinuxchannel/udp_socket$ gcc -o udp_socket_client udp_socket_client.c
[email protected]:/code/thelinuxchannel/udp_socket$


Aqui está o meu código-fonte do meu servidor de soquete UDP de teste. Download: udp_socket_server.c

/* udp_socket_server.c
 * The Linux Channel
 * Author: Kiran Kankipati
 * Updated: 01-Feb-2017
 */

#include <stdio.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>

#define MAXBUF 1024

int main()
{ int sockfd, len, i;
  unsigned char buf[MAXBUF];
  struct sockaddr_in udp_server_addr;
  struct sockaddr_in udp_client_addr;
  struct sockaddr_storage server_storage;
  socklen_t addr_size, client_addr_size;

  sockfd = socket(PF_INET, SOCK_DGRAM, 0); // create a UDP socket
  if(sockfd<=0) { printf("socket error !\n"); return 0; }

  /* configure settings to register UDP server */
  udp_server_addr.sin_family = AF_INET;
  udp_server_addr.sin_port = htons(6800); // server port
  udp_server_addr.sin_addr.s_addr = inet_addr("127.0.0.1"); // local-host
  memset(udp_server_addr.sin_zero, '\0', sizeof udp_server_addr.sin_zero);  
  bind(sockfd, (struct sockaddr *) &udp_server_addr, sizeof(udp_server_addr)); // bind the socket
  addr_size = sizeof server_storage;
  
  len = recvfrom(sockfd, buf, MAXBUF, 0, (struct sockaddr *)&server_storage, &addr_size); //receive data from client 
  
  printf("Received from server: %d bytes\n", len); for(i=0;i<len;i++) { printf("%02x ", buf[i]); } printf("\n"); //print received data dump
	
  memset(buf, 0xcd, MAXBUF); // set the entire buffer with 0xcd (i.e 1100 1101 binary)

  sendto(sockfd, buf, MAXBUF, 0, (struct sockaddr *)&server_storage, addr_size); //send the data to client

  return 0;
}

Compile the udp_socket_server.c:

[email protected]D-1TB2:/code/thelinuxchannel/udp_socket$ gcc -o udp_socket_server udp_socket_server.c
[email protected]:/code/thelinuxchannel/udp_socket$


Execute os binários:

[email protected]:/code/thelinuxchannel/udp_socket$ ls
udp_socket_client  udp_socket_client.c  udp_socket_server  udp_socket_server.c
[email protected]:/code/thelinuxchannel/udp_socket$

Primeiro, execute o udp_socket_server em um terminal para que ele registre e escute na porta 6800 como mostrado abaixo:
execute udp server in the terminal

Agora, em um terminal diferente, verifique o status do registro do servidor UDP via netstat -l command:
with netstat check the status of udp server registration

Antes de executar o cliente UDP, abra o Wireshark e capture a porta de loopback local lo como mostrado abaixo:
before executing udp client open wireshark and capture local loopback port

Execute o cliente de soquete UDP em um terminal diferente como mostrado abaixo. Você pode ver assim que for executado, ele envia o teste dados para o servidor de soquetes UDP e recebe os dados de teste do servidor.
execute udp socket client in a different terminal

Aqui está a captura de tela do terminal de execução do servidor de soquetes UDP. O servidor de soquete UDP recebe os dados de teste do cliente imprime o mesmo na tela (conforme mostrado abaixo) e responde rapidamente ao cliente enviando o próprio despejo de dados de teste.
received data in udp server from udp client

Na captura de pacotes Wireshark você pode ver esses pacotes, analisar e confirmar o mesmo. Abaixo está a captura de pacote Wireshark do pacote UDP de cliente para servidor:
wireshark capture of udp packet client to server

E aqui está a captura de pacotes Wireshark do pacote UDP do servidor para o cliente:
Wireshark captura de servidor de pacotes udp para cliente

Cursos Linux oferecidos: Se você estiver interessado em participar de aulas em rede, Linux, software de sistemas, etc. com sessões de treinamento de demonstração ao vivo. Você pode aprender através da plataforma de ensino à distância. Ensino meus alunos de forma antiquada. E eu acredito que é assim que a educação deve ser fornecida sem limites e limites. Para mais detalhes, visite CURSOS.


Featured Video:



Suggested Topics:


☆ Tutorials :: Arduino UNO Projects ↗


☆ Tutorials :: Network Software Development ↗


☆ Tutorials :: Research and Projects ↗


☆ Tutorials :: Linux (user-space), Systems Architecture ↗


☆ Tutorials :: Linux Kernel Software Development ↗


☆ Tutorials :: Linux Kernel Internals (PDFs) - by Ramin Farajpour ↗


☆ Tutorials :: Software Development (Programming) Tools ↗


☆ Tutorials :: Embedded Projects ↗

Join The Linux Channel :: Facebook Group ↗

Visit The Linux Channel :: on Youtube ↗


Join a course:

💎 Linux, Kernel, Networking and Device Drivers: PDF Brochure
💎 PhD or equivalent (or Post Doctoral) looking for assistance: Details
💎 ... or unlimited life-time mentorship: Details


💗 Help shape the future: Sponsor/Donate


Recommended Topics:
Featured Video:
Watch on Youtube - [119//0] 0x1de Layer-2 (L2) Multicast Frame Deep Analysis | Part 3 | #TheLinuxChannel #Networking ↗

Roadmap - How to become Linux Kernel Developer - Device Drivers Programmer and a Systems Software Expert ↗
Wednesday' 15-Jul-2020
Many viewers and even sometimes my students ask me how I can become a kernel programmer or just device driver developer and so on. So I shot this video (and an add-on video) where I summarized steps and a roadmap to become a full-fledged Linux Kernel Developer.

Linux Kernel Module to Drop Packets captured via netfilter hooks ↗
Wednesday' 15-Jul-2020
Here is my sample Kernel Module to drop packets (i.e sk_buff instance) captured via netfilter hooks. When you want to drop packets in your custom netfilter hooks make sure you never do a manual kfree_skb(skb) API call. Since it is anyway performed once the flow of the code moves out of your kernel module netfilter hook. All you need to do is to return NF_DROP to drop gracefully the desired packet. Here is my detailed video and a sample Linux Kernel module.

Weekly News Digest - Week 02 - July 2020 ↗
Wednesday' 15-Jul-2020
The Linux Channel :: Weekly News Digest - Week 02 - July 2020
> Google is teaming up with Ubuntu to bring Flutter apps to Linux
> Linux kernel developers: This new BLM coding style avoids words like blacklist
> Zstd'ing The Kernel Might See Mainline With Linux 5.9 For Faster Boot Times
> Linux 5.9 To Bring Arm Memory Tagging Extension Support
> Linux Kernel Raising Compiler Build Requirement To GCC 4.9
> Linux Developers May Discuss Allowing Rust Code Within The Kernel
> Premio Unveils Intel 9th Gen Industrial Motherboard For Advanced Embedded And IoT Solutions

CEO, CTO Talk ↗
Wednesday' 15-Jul-2020

Arduino UNO - RO Water Purifier Controller ↗
Wednesday' 15-Jul-2020
Here is a Youtube VLOG of my DIY RO Water Purifier Controller done via Arduino UNO. I want the Arduino UNO to control the RO pump, so that it pumps for a specific duration and stops automatically. This is done via Opto-isolated 4 Channel 5V 10A Relay Board meant for Arduino UNO, Raspberry Pi or similar SoC boards which offers GPIO pins. To this relay I have connected the RO water purifier booster pump which works at 24V DC connected via 220V AC to 24V DC power supply adaptar. I have also connected a small active 5V buzzer to notify the progress and completion as it fills the tank/canister.

Data-Plane and Control-Plane of a Networking Device ↗
Wednesday' 15-Jul-2020

AT&T Archives: The UNIX Operating System ↗
Wednesday' 15-Jul-2020

Socket Options - Socket Programming - setsockopt(), getsockopt() ↗
Wednesday' 15-Jul-2020

Tour of my new Home Networking Lab within VirtualBox VM ↗
Wednesday' 15-Jul-2020

Compiling a C Compiler with a C Compilter | Compile gcc with gcc ↗
Wednesday' 15-Jul-2020
The fundamental aspect of a programming language compiler is to translate code written from language to other. But most commonly compilers will compile code written in high-level human friendly language such as C, C++, Java, etc. to native CPU architecture specific (machine understandable) binary code which is nothing but sequence of CPU instructions. Hence if we see that way we should able to compile gcc Compiler source code with a gcc Compiler binary.


Trending Video:
Watch on Youtube - [393//0] 0x1dc Layer-2 (L2) Multicast Frame Deep Analysis | Part 1 | #TheLinuxChannel #Networking ↗

Understanding Linux Network Internals - PDF Book ↗
Wednesday' 15-Jul-2020
Here is a quick download link for free Understanding Linux Network Internals PDF Book.



Recommended Video:
Watch on Youtube - [666//0] 0x1da Design & Architecture of custom Dynamic Routing Protocols | Part 1 | #TheLinuxChannel ↗