UDP kullanarak ping işlemi nasıl yapılır?

Bu yazıda UDP(User Datagram Protocol) kullanarak basit bir ping işlemi nasıl yapılır kodlarını paylaşacağım.

Socket programlamada bilindiği üzere iki taraf gerekmektedir. Bir taraf sunucu ve bir taraf client olmalıdır. Aşağıda Python programlama dilinde yazılmış basit bir UDP tabanlı ping işlemi gerçekleştiren programı bulabilirsiniz.

Client.py dosyasının içeriği:

import socket
import sys
import time

try:
    socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)  
    socket.settimeout(5)
except socket.error:
    print 'Failed to create socket'
    sys.exit()

host = '127.0.0.1' 
port = 25400

while (1):
    msg = "Default message => "
    try:
        raw_input(msg)
        send_time_ms = time.time()
        socket.sendto(msg, (host, port))  
        d = socket.recvfrom(1024)
        reply = d[0] 
        addr = d[1]  
        recv_time_ms = time.time()
        rtt_in_ms = round(recv_time_ms - send_time_ms, 3)
        print reply + "Recieve time in ms: (client) " + str(rtt_in_ms)

    except socket.gettimeout():
        print "timeout"
        continue

Server.py dosyasının içeriği:

import socket
import sys
import time

PORT = 25400
host_ip = '127.0.0.1'
try:
    sckt = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 
    print "Socket created"
except socket.error, msg:
    print 'error' + msg[1] 
    sys.exit()


try:
    sckt.bind((host_ip, PORT)) 
    sckt.settimeout(5)
    print ("socket successfully connected to " + host_ip)
except socket.error,msg:
    print 'bind failed Error no:' + str(msg[0]) + ' Message of Error: ' + msg[1]
    sys.exit()

print 'socket bind completed'


while True:

    try:
            send_time_ms = time.time()
            d = sckt.recvfrom(1024) 
            data = d[0]
            addr = d[1]
            reply = 'Ok....' + data
            recv_time_ms = time.time()
            rtt_in_ms = round(recv_time_ms - send_time_ms, 3)
            print reply + "Recieve time in ms: (client) " + str(rtt_in_ms)
            sckt.sendto(reply, addr)

    except sckt.gettimeout():
        print "timeout"

sckt.close()

Bu iki dosyayı Anaconda Navigator’de bulunan webspyder üzerinde açarsanız ve bu iki dosyayı çalıştırdıktan sonra terminalde iki farklı terminal ekranında önce sunucu tarafını sonra client tarafını çalıştırırsanız iki tarafın birbiriyle haberleştiğine şahit olabilirsiniz. Böylelikle iki taraf arasında basit bir UDP tabanlı bağlantı oluşturmuş olduk. Timeout’u da kullandığınız durumda tam anlamıyla UDP gibi çalışan bir ping programı elde edebilirsiniz. 🙂

Please follow and like us:
error