codigo de ejemplos (java) udp
El siguiente ejemplo muestra cómo usar el protocolo UDP para una comunicación cliente/servidor:
Servidor:
public static void main(String[] args) { try { System.out.println("server creado........"); // 1. crear el servidor.. DatagramSocket socket = new DatagramSocket(45000); // 2. recibir mensaje desde el cliente... // 2.1 crear el paquete donde se recibe el mensaje. byte[] buffer = new byte[1024]; DatagramPacket paqueteCliente = new DatagramPacket(buffer, 1024); // 2.2 recibir el paquete. operacion bloqueante. System.out.println("socket esperando...."); socket.receive(paqueteCliente); // 2.3 leer el paquete como string... String msj = new String(paqueteCliente.getData()); System.out.println("desde " + paqueteCliente.getAddress().getHostAddress() + " desde el puerto " + paqueteCliente.getPort() + " se recibio:" + msj); // 3. enviar respuesta.. String resp = new Date().toString();// la hora como respuesta. // 3.1 crear datagrama de envio. // direccion destino.. InetAddress addr = paqueteCliente.getAddress();// la misma del // cliente. int port = paqueteCliente.getPort(); // el datagrama contiene la información del destino. DatagramPacket paqueteEnvio = new DatagramPacket(resp.getBytes(), resp.length(), addr, port); System.out.println("enviando:"+new String(paqueteEnvio.getData())); // 3.2 enviar paquete... socket.send(paqueteEnvio); //4. cerrar el socket... socket.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
Cliente:
public static void main(String[] args) { try { // 1. crear el socket por donde se enviara la peticion y se recibira // la respuesta.. DatagramSocket socket = new DatagramSocket(32000); // 2. crear datagrama para enviar la info. el datagrama contiene // toda la info necesaria para que llegue el msj String msj = "Hola Server....."; // msj a enviar. String ip = "127.0.0.1"; int port = 45000; // 2.1 crear datagrama DatagramPacket paqueteEnvio = new DatagramPacket(msj.getBytes(), msj.length(), InetAddress.getByName(ip), port); // 2.2 enviar paquete. socket.send(paqueteEnvio); // 3. recibir respuesta... // 3.1 crear datagrama de recepcion. byte[] resp = new byte[1024]; DatagramPacket paqueteRecibido = new DatagramPacket(resp, resp.length); // 3.2 recibir paquete. socket.receive(paqueteRecibido); // 4. mostrar info... System.out.println("Server respondio desde " + paqueteRecibido.getAddress().getHostAddress() + " por el puerto " + paqueteRecibido.getPort() + " se recibio:" + new String(paqueteRecibido.getData())); // 5. cerrar socket.close(); } catch (IOException e) { e.printStackTrace(); } }
Código de ejemplo (Python 3.x)[editar]
El siguiente ejemplo muestra cómo usar el protocolo UDP para una comunicación cliente/servidor:
Servidor:
import socketserver print("Servidor iniciado...") class MyUDPHandler(socketserver.BaseRequestHandler): def handle(self): data = self.request[0].strip() socket = self.request[1] print("{0} Ha escrito:".format(self.client_address[0])) print(data) socket.sendto(data.upper(), self.client_address) if __name__ == "__main__": HOST, PORT = "localhost", 9999 server = socketserver.UDPServer((HOST, PORT), MyUDPHandler) server.serve_forever()
Cliente (Cambia "localhost" por la dirección IP del servidor.):
import socket import sys print("Cliente iniciado...") HOST, PORT = "localhost", 9999 data = " ".join(sys.argv[1:]) sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) sock.sendto(bytes(data + "\n","utf8"), (HOST, PORT)) received = sock.recv(1024) print("Enviado: {0}".format(data)) print("Recibido: {0}".format(received))
Código de ejemplo (C)[editar]
El siguiente ejemplo muestra cómo usar el protocolo UDP para una comunicación cliente/servidor:
Servidor:
#include <winsock.h> #include <stdio.h> #pragma comment(lib,"ws2_32.lib") const int BufLen = 1024; int main() { WSADATA wsaData; SOCKET RecvSocket; sockaddr_in RecvAddr; int Puerto = 2345; char RecvBuf[BufLen]; sockaddr_in SenderAddr; int SenderAddrSize = sizeof(SenderAddr); WSAStartup(MAKEWORD(2,2), &wsaData); RecvSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); RecvAddr.sin_family = AF_INET; RecvAddr.sin_port = htons(Puerto); RecvAddr.sin_addr.s_addr = INADDR_ANY; bind(RecvSocket, (SOCKADDR *) &RecvAddr, sizeof(RecvAddr)); recvfrom(RecvSocket,RecvBuf, BufLen,0,(SOCKADDR *)&SenderAddr,&SenderAddrSize); printf("%s\n",RecvBuf); closesocket(RecvSocket); WSACleanup(); }
Cliente (Cambia "127.0.0.1" por la dirección IP del servidor):
#include <winsock.h> #pragma comment(lib,"ws2_32.lib") int main() { WSADATA wsaData; SOCKET SendSocket; sockaddr_in RecvAddr; int Puerto = 2345; char ip[] = "127.0.0.1"; char SendBuf[] = "Hola!!!!"; WSAStartup(MAKEWORD(2,2), &wsaData); SendSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); RecvAddr.sin_family = AF_INET; RecvAddr.sin_port = htons(Puerto); RecvAddr.sin_addr.s_addr = inet_addr(ip); sendto(SendSocket,SendBuf,strlen(SendBuf)+1,0,(SOCKADDR *) &RecvAddr,sizeof(RecvAddr)); WSACleanup(); }

