0Pricing
Lua Academy · Ders

İstemci Oluşturma

Bir sunucudan veri isteyin.

İstemci Oluşturma, CoddyKit'te ücretsiz bir Lua Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Lua Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Lua Academy kursu toplamda 4 dersten oluşur.

İstemci Yaşam Döngüsü

Bir TCP istemcisi açık bir yaşam döngüsünü izler: soket oluşturur, bir sunucuya bağlanır, veri alışverişi yapar ve ardından bağlantıyı kapatır.

LuaSocket'te her adım tek bir yöntem çağrısıdır ve her biri başarısız olabilir. İyi yazılmış bir istemci her dönüş değerini denetler ve herhangi bir hata yolunda soketini temizler.

local socket = require("socket")
local client = assert(socket.tcp())

Güvenli Bağlanma

Ölü bir ana bilgisayarın programınızı kilitlememesi için connect çağrısından önce bağlantı zaman aşımı ayarlayın. Birkaç saniye genellikle yeterlidir.

connect nil döndürürse hatayı günlüğe kaydedip işlemi sonlandırın. El sıkışmanın başarılı olduğunu asla varsaymayın.

client:settimeout(5)
local ok, err = client:connect("127.0.0.1", 8080)
if not ok then
  client:close()
  error("connect failed: " .. err)
end

socket.connect Kullanımı

Yaygın kullanım için socket.connect(host, port), oluşturma ve bağlanma işlemlerini bir araya getirir. Kullanıma hazır bir istemci nesnesi veya nil ile bir hata döndürür.

Bu biçim kısadır, ancak el sıkışmadan önce zaman aşımı ayarlamanıza izin vermez; bu nedenle güvenilmez ağlarda açık biçimi tercih edin.

local socket = require("socket")
local client, err = socket.connect("example.com", 13)
if not client then error(err) end

İstek Gönderme

Bağlandıktan sonra istek baytlarınızı send ile yazın. Birçok metin protokolü satırları satır başı + yeni satır (\r\n) ile sınırlar.

TCP bir akış olduğundan, sunucunun nerede bittiğini anlayabilmesi için her mantıksal mesajı açıkça sonlandırın.

local msg = "PING\r\n"
local sent, err = client:send(msg)
if not sent then error("send failed: " .. err) end

Satır Yanıtı Okuma

Satır tabanlı protokollerde "*l" kalıbıyla döngü içinde okuyun. Her çağrı, sonlandırıcısı olmadan bir satır döndürür.

nil durumunda hatayı inceleyin: "closed" sunucunun bağlantıyı kapattığı, "timeout" ise zamanında veri gelmediği anlamına gelir.

client:settimeout(5)
local line, err = client:receive("*l")
if line then
  print("server said:", line)
else
  print("recv error:", err)
end

Yanıtın Tamamını Okuma

İstek/yanıt protokolleri çoğu zaman sunucu bağlantıyı kapatana kadar her şeyi okur. Gövdenin tamamını almak için "*a" kullanın.

Gönderme tarafını önce shutdown("send") ile yarı kapatırsanız sunucu girişin sona erdiğini görür ve yanıtını tamamlayabilir.

client:send("GET DATA\r\n")
client:shutdown("send")
local body, err = client:receive("*a")
print(#(body or ""), "bytes received")

Sabit Uzunluklu Çerçeveleme

İkili protokoller çoğu zaman her mesajın başına uzunluğunu koyar. Önce uzunluk üst bilgisini, ardından tam olarak o kadar baytı okuyun.

receive işlevine bir sayı geçirmek, o sayıdaki bayt gelene veya soket hata verene kadar bekler; böylece bayt akışı üzerinde kesin çerçeveleme sağlanır.

local header = client:receive(4)
local len = string.unpack(">I4", header)
local payload = client:receive(len)

Tam Bir Yankı İstemcisi

Akışın tamamı şöyledir: bağlanın, bir satır gönderin, yankılanan satırı okuyun ve bağlantıyı kapatın. Bu, standart LuaSocket istemcisi biçimidir.

Kısalık için hata verebilecek her çağrının assert ile korunduğuna dikkat edin; ancak gerçek bir istemci hataları uygun biçimde ele alırdı.

local socket = require("socket")
local c = assert(socket.connect("127.0.0.1", 8080))
assert(c:send("hello\r\n"))
print(c:receive("*l"))
c:close()

Bağlantı Kesilmelerini Ele Alma

Sunucular bağlantıları herhangi bir anda kesebilir. Kapanmış bir eşe yapılan send çağrısı nil, "closed" döndürebilir; receive ise verinin kısmi bölümünü hatayla birlikte döndürür.

"closed" durumunu çökme olarak değil, normal bir son durum olarak ele alın. Yeniden bağlanma mantığı, istemcinin etrafındaki bir yeniden deneme sarmalayıcısına ait olmalıdır.

local data, err, partial = client:receive("*a")
if err == "closed" then
  print("peer closed, got", #partial, "bytes")
end

Engellemesiz İstemciler

Tamamen engellemesiz bir istemci için zaman aşımını 0 olarak ayarlayın. Böylece çağrılar hemen döner ve ilerleme mümkün olmadığında "timeout" bildirilir.

Meşgul döngüye girmeden birçok soketin hazır olmasını verimli biçimde beklemek için bunu socket.select ile birleştirin.

client:settimeout(0)
local r = socket.select({client}, nil, 5)
if #r > 0 then print(client:receive("*l")) end

Ana Bilgisayar Adlarını Çözümleme

Ana bilgisayar adıyla bağlanırsanız LuaSocket bu adı sizin için çözümler. Çözümlemeyi incelemek veya önbelleğe almak için socket.dns.toip ya da socket.dns.getaddrinfo çağrısını kendiniz yapın.

Bir kez çözümleyip IP üzerinden bağlanmak, sıkı bir yeniden bağlanma döngüsünde tekrarlanan DNS aramalarını önler.

local socket = require("socket")
local ip = assert(socket.dns.toip("example.com"))
local c = assert(socket.connect(ip, 80))

Hızlı Kontrol

Bir sunucu bağlantıyı kapatana kadar gönderdiği her şeyi okumanın doğru yolunu seçin.

Özet

Uçtan uca bir TCP istemcisi oluşturdunuz: zaman aşımıyla bağlandınız, istekleri çerçeveleyip gönderdiniz, satır, bayt sayısı veya tüm akış biçimindeki yanıtları okudunuz ve bağlantıyı düzgün biçimde kapattınız.

Ayrıca bağlantı kesilmelerini ele almayı, select ile engellemesiz modu ve DNS önbelleğe almayı gördünüz. Sırada bu istemcilere yanıt veren sunucu tarafını yazacaksınız.

Sıkça Sorulan Sorular

“İstemci Oluşturma” dersi ücretsiz mi?

Evet — “İstemci Oluşturma” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Lua Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Lua Academy kursu toplamda 4 dersten oluşur.

“İstemci Oluşturma” dersinde ne öğreneceğim?

Bir sunucudan veri isteyin. Lua Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Lua Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Lua Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.

“İstemci Oluşturma” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Lua Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Lua Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. TCP Temelleri
  2. İstemci Oluşturma
  3. Sunucu Oluşturma
  4. HTTP İstekleri
← Lua Academy Sayfasına Dön