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]:/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 ↗


💗 Help shape the future: Sponsor/Donate


Recommended Topics:
Featured Video:
Watch on Youtube - x20f Code with Kiran - Live Coding | Linux Kernel Programming | Kernel Libraries | Part 1 ↗

Multi-Client TCP Server with pthreads Mutex Synchronized - Code-walk of viewer code - Sekhar Pariga ↗
Monday' 28-Sep-2020
Here is a code-walk of a git-hub source submitted by a viewer Sekhar Pariga, which is a Multi-client TCP Server with pthreads Mutex synchronized. Basically it is a Directory Listing Server, that serves ls, cd, pwd of directory functions to connecting TCP clients which are remotely (locally) executed by the server. Server is implemented using multi-thread pthread library, to serve multiple clients simultaneously. Server keeps the each accepted client session details in the queue data structure. Client session queue contains each clients socket-fd and present working directory as a queue node.

Adding your own Kernel Modules into Linux Kernel Source | Linux Kernel Programming ↗
Monday' 28-Sep-2020
Whenever you do custom kernel modules, you can optionally make it a part of existing Linux Kernel source. This does not mean you are submitting your kernel module to the mainline kernel source (i.e kernel.org Linux Kernel Foundation). What I meant is, you can make your kernel module(s) part of Linux Kernel source so that when you compile your kernel you can automatically compile your kernel module(s) too. As well when you create/modify kernel .config configuration file (such as via make menuconfig, etc), you can enable or disable your kernel module(s) too.
To do the same you have to register (and include) your custom Kernel Module's Kconfig and Makefile to the existing Kconfig and Makefile of the Linux Kernel source Here is a detailed multi-episode video of mine which gives the overall idea and the big-picture.

Roadmap - How to become Linux Kernel Developer - Device Drivers Programmer and a Systems Software Expert ↗
Monday' 28-Sep-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.

Weekly News Digest - Week 03 - July 2020 ↗
Monday' 28-Sep-2020
The Linux Channel :: Weekly News Digest - Week 03 - July 2020
> Linux founder tells Intel to stop inventing 'magic instructions' and 'start fixing real problems'
> QNAP launches its first 2.5GbE network switch - QSW-1105-5T
> Japan's ARM-based Fugaku is the world's fastest supercomputer
> FreeBSD Back To Seeing Progress On 802.11ac WiFi Support, Ath10k Driver
> Sparkfun Launches the ZED-F9R GPS Dead Reckoning Raspberry Pi pHAT for Mobile Robots
> ODROID-N2 Plus SBC Gets Amlogic S922X Rev. C Processor Clocked at up to 2.4 GHz
> Rock Pi E SBC Comes with WiFi, Bluetooth, Two Ethernet Ports, and Optional PoE

Nmap Network Scanning ↗
Monday' 28-Sep-2020

Slow RGB Fade via Arduino UNO ↗
Monday' 28-Sep-2020

PHP installation ↗
Monday' 28-Sep-2020

Layer-2 (L2) Multicast Frame Deep Analysis ↗
Monday' 28-Sep-2020

Management ↗
Monday' 28-Sep-2020

IP-in-IP Tunneling Demystified - VPN Tunnels ↗
Monday' 28-Sep-2020
There can be many ways one can architect VPN Networks. The end objective is to tunnel private IP (typically LAN subnets) within public IP Networks (such as Internet). You can establish such a tunnel in various creative ways, such as Transport Mode, Tunnel Mode, IP-in-IP tunneling, etc. Also you can choose any transport layer protocol of your choice such as send VPN traffic via TCP, or via UDP and so on.


Trending Video:
Watch on Youtube - x20f Code with Kiran - Live Coding | Linux Kernel Programming | Kernel Libraries | Part 1 ↗

Data-Plane and Control-Plane of a Networking Device ↗
Monday' 28-Sep-2020



Recommended Video:
Watch on Youtube - x20f Code with Kiran - Live Coding | Linux Kernel Programming | Kernel Libraries | Part 1 ↗