Paket | flash.net |
Sınıf | public class SecureSocket |
Miras Alma | SecureSocket Socket EventDispatcher Object |
Dil Sürümü: | ActionScript 3.0 |
Çalışma Zamanı Sürümleri: | Flash Player 11, AIR 2 |
AIR profili desteği: Bu özellik tüm masaüstü işletim sistemlerinde desteklenir ancak tüm AIR for TV aygıtlarında desteklenmez. Mobil aygıtlarda, AIR 20'den itibaren Android ve ayrıca iOS platformlarında desteklenir. Desteği çalışma zamanında SecureSocket.isSupported
özelliğini kullanarak test edebilirsiniz. Birden fazla profilde API desteği ile ilgili daha fazla bilgi için bkz. AIR Profil Desteği.
SSL/TLS protokolleri, güvenli bir yuva bağlantısını her iki açıdan da işlemek için bir mekanizma sağlar:
- Yuva üzerindeki veri iletişiminin şifrelenmesi
- Sertifikası yoluyla ana bilgisayar kimliğinin doğrulanması
Desteklenen şifreleme protokolleri SSL 3.1 ve üzeri ile TLS 1.0 ve üzeridir. (TLS, SSL'nin ardından gelen protokoldür. TLS 1.0, SSL 3.1'e eşittir; TLS 1.1, SSL 3.2'ye eşittir ve bu şekilde devam eder.) SSL 3.0 veya alt sürümleri desteklenmez.
Sunucu sertifikasının doğrulaması güven deposu ve istemci platformunun sertifika doğrulama desteği kullanılarak yapılır. Ek olarak, kendi sertifikalarınızı programlama yoluyla addBinaryChainBuildingCertificate()
yöntemini kullanarak ekleyebilirsiniz. Bu API şu anda iOS'ta desteklenmemektedir. Bu API'nin iOS'ta kullanılması bir istisna oluşturur - "ArgumentError: Hata #2004"
SecureSocket sınıfı yalnızca geçerli ve güvenilir sertifikaları olan sunuculara bağlanır. Sertifikasıyla ilgili sorunu olan bir sunucuya bağlanmayı seçemezsiniz. Örneğin, sertifikasının süresi dolmuş bir sunucuya bağlanmak mümkün değildir. Aynı durum, güvenilir bir tutturma sertifikasıyla bağlantısı olmayan bir sertifika için de geçerlidir. Sertifika herhangi başka bir şekilde geçerli olsa bile bağlantı kurulmayacaktır.
SecureSocket sınıfı güvenilir bir sunucuyla şifreli iletişim kurmak için kullanışlıdır. Başka bir deyişle, SecureSocket nesnesi sıradan bir Socket nesnesi gibi davranır.
SecureSocket sınıfını kullanmak için bir SecureSocket nesnesi oluşturun (new SecureSocket()
). Ardından, dinleyicilerinizi ayarlayın ve daha sonra da SecureSocket.connect(host, port)
öğesini çalıştırın. Sunucuya başarıyla bağlandığınızda, yuva bir connect
olayı gönderir. Başarılı bir bağlantı; sunucuya ilişkin güvenlik protokollerinin desteklendiği, sunucu sertifikasının geçerli ve güvenilir olduğu bir bağlantıdır. Sertifika doğrulanamazsa, Soket bir IOError
olayı gönderir.
Önemli: Çevrimiçi Sertifika Durumu Protokolü (OCSP) tüm işletim sistemleri tarafından desteklenmez. Kullanıcılar ayrıca ayrı bilgisayarlarda OCSP kontrolünü devre dışı bırakabilir. OCSP desteklenmiyorsa veya devre dışı bırakılmışsa ve sertifika bir Sertifika Geri Alma Listesi (CRL) kullanarak geri almayı denetlemek için gereken bilgiyi içermiyorsa, sertifika geri alma işaretlenmez. Sertifika başka bir şekilde geçerliyse kabul edilir. Bu senaryo, sunucunun geri alınmış bir sertifika kullanmasını sağlayabilir.
İlgili API Öğeleri
Özellik | Tanımlayan: | ||
---|---|---|---|
bytesAvailable : uint [salt okunur]
Girdi arabelleğinde okunabilen verilerin bayt sayısı. | Socket | ||
bytesPending : uint [salt okunur]
Yazma arabelleğinde kalan bayt sayısını belirtir. | Socket | ||
connected : Boolean [salt okunur]
Bu Socket nesnesinin halen bağlı olup olmadığını gösterir. | Socket | ||
constructor : Object
Belirli bir nesne örneği için sınıf nesnesine veya yapıcı işlevine bir başvuru. | Object | ||
endian : String
Veri için bayt sırasını belirtir. | Socket | ||
isSupported : Boolean [statik] [salt okunur]
Güvenli yuvaların geçerli sistemde desteklenip desteklenmediğini belirtir. | SecureSocket | ||
localAddress : String [salt okunur]
Yerel makinede bu soketin bağlı olduğu IP adresi. | Socket | ||
localPort : int [salt okunur]
Yerel makinede bu soketin bağlı olduğu bağlantı noktası. | Socket | ||
objectEncoding : uint
Bir nesneyi okurken veya yazarken kullanılan AMF sürümünü kontrol eder. | Socket | ||
remoteAddress : String [salt okunur]
Bu soketin bağlandığı uzak makinenin IP adresi. | Socket | ||
remotePort : int [salt okunur]
Bu soketin bağlandığı uzak makinenin bağlantı noktası. | Socket | ||
serverCertificate : X509Certificate [salt okunur]
Güvenli bir SSL/TLS bağlantısı kurulduktan sonra sunucudan alınan X.509 sertifikasını tutar. | SecureSocket | ||
serverCertificateStatus : String [salt okunur]
Sunucu sertifikasının durumunu döndürür. | SecureSocket | ||
timeout : uint
Bağlantı için beklenilecek milisaniye sayısını belirtir. | Socket |
Yöntem | Tanımlayan: | ||
---|---|---|---|
Yeni bir SecureSocket nesnesi oluşturur. | SecureSocket | ||
Sisteminizin sunucu sertifikasını doğrulamak için kullandığı yerel sertifika zincirine bir X.509 sertifikası ekler. | SecureSocket | ||
addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
EventDispatcher nesnesi olan bir olay dinleyici nesnesini, dinleyicinin bir olayın bildirimini alması için kaydeder. | EventDispatcher | ||
Soketi kapatır. | Socket | ||
[geçersiz kıl]
SSL veya TLS kullanarak yuvayı belirtilen ana bilgisayar ve bağlantı noktasına bağlar. | SecureSocket | ||
Olay akışına bir olay gönderir. | EventDispatcher | ||
Soketin çıktı arabelleğinde birikmiş tüm verileri temizler. | Socket | ||
EventDispatcher nesnesinin belirli bir olay türü için kayıtlı dinleyicisi olup olmadığını kontrol eder. | EventDispatcher | ||
Bir nesnenin belirli bir özelliğinin tanımlı olup olmadığını gösterir. | Object | ||
Object sınıfının bir örneğinin parametre olarak belirtilen nesnenin prototip zincirinde olup olmadığını gösterir. | Object | ||
Belirtilen özelliğin bulunup bulunmadığını ve numaralandırılabilir olup olmadığını gösterir. | Object | ||
Soketten bir Boolean değeri okur. | Socket | ||
Soketten işaretli bir bayt okur. | Socket | ||
Soketten length parametresinde belirtilen sayıda veri baytı okur. | Socket | ||
Soketten bir IEEE 754 çift kesinlikli kayar nokta sayısı okur. | Socket | ||
Soketten bir IEEE 754 tek kesinlikli kayar nokta sayısı okur. | Socket | ||
Soketten işaretli bir 32 bit tam sayı okur. | Socket | ||
Bayt akışından, belirtilen karakter kümesini kullanarak çok baytlı bir dize okur. | Socket | ||
readObject():*
Soketten AMF serileştirilmiş biçimde kodlanmış bir nesne okur. | Socket | ||
Soketten işaretli bir 16 bit tam sayı okur. | Socket | ||
Soketten işaretsiz bir bayt okur. | Socket | ||
Soketten işaretsiz bir 32 bit tam sayı okur. | Socket | ||
Soketten işaretsiz bir 16 bit tam sayı okur. | Socket | ||
Soketten bir UTF-8 dizesi okur. | Socket | ||
Soketten length parametresinde belirtilen sayıda UTF-8 veri baytı okur ve bir dize döndürür. | Socket | ||
EventDispatcher nesnesinden bir dinleyiciyi kaldırır. | EventDispatcher | ||
Dinamik bir özelliğin döngü işlemlerinde kullanılabilirliğini ayarlar. | Object | ||
Bu nesnenin, yerel ayara özel kurallara göre biçimlendirilmiş dize temsilini döndürür. | Object | ||
Belirtilen nesnenin dize olarak temsil edilen halini döndürür. | Object | ||
Belirtilen nesnenin temel değerini döndürür. | Object | ||
Bir olay dinleyicisinin bu EventDispatcher nesnesiyle mi, yoksa onun belirtilen olay türüne yönelik üst öğelerinden biriyle mi kayıtlı olduğunu kontrol eder. | EventDispatcher | ||
Sokete bir Boolean değeri yazar. | Socket | ||
Sokete bir bayt yazar. | Socket | ||
Belirtilen bayt dizisinden bir bayt sırası yazar. | Socket | ||
Sokete IEEE 754 çift kesinlikli kayar nokta sayısı yazar. | Socket | ||
Sokete IEEE 754 tek keskinlikli kayar nokta sayısı yazar. | Socket | ||
Sokete 32 bit işaretli tam sayı yazar. | Socket | ||
Belirtilen karakter kümesini kullanarak bayt akışından çok baytlı bir dize yazar. | Socket | ||
Sokete AMF serileştirilmiş biçimde bir nesne yazar. | Socket | ||
Sokete 16 bit tam sayı yazar. | Socket | ||
Sokete 32 bit bir imzasız tam sayı yazar. | Socket | ||
Şu verileri sokete yazar: belirtilen UTF-8 dizesinin uzunluğunu bayt cinsinden belirten 16 bit imzasız tam sayı ve ardından dizenin kendisi. | Socket | ||
Sokete bir UTF-8 dizesi yazar. | Socket |
Olay | Özet | Tanımlayan: | ||
---|---|---|---|---|
[broadcast olayı] Flash Player veya AIR uygulaması işletim sistemi odağına gelip etkin olduğunda gönderilir. | EventDispatcher | |||
Sunucu, soket bağlantısını kapattığında gönderilir. | SecureSocket | |||
Bir ağ bağlantısı kurulduğunda gönderilir. | SecureSocket | |||
[broadcast olayı] Çalışan Flash Player veya AIR uygulaması sistem odağını kaybettiğinde ve etkin olmayan duruma geldiğinde gönderilir. | EventDispatcher | |||
Bir gönderme veya alma işleminin başarısız olmasına neden olan bir girdi veya çıktı hatası ortaya çıktığında gönderilir. | SecureSocket | |||
Bir yuva yazma arabelleğinden ağ aktarım katmanına veri taşıdığında gönderilir | Socket | |||
Güvenlik kısıtlaması nedeniyle SecureSocket.connect() öğesine yapılan bir çağrı başarısız olduğunda gönderilir. | SecureSocket | |||
Bir soket tarafından veri alındığında gönderilir. | SecureSocket |
isSupported | özellik |
isSupported:Boolean
[salt okunur] Dil Sürümü: | ActionScript 3.0 |
Çalışma Zamanı Sürümleri: | Flash Player 11, AIR 2 |
Güvenli yuvaların geçerli sistemde desteklenip desteklenmediğini belirtir.
Güvenli yuvalar tüm platformlarda desteklenmez. SecureSocket örneği oluşturmaya çalışmadan önce bu özelliği kontrol edin.
Uygulama
public static function get isSupported():Boolean
serverCertificate | özellik |
serverCertificate:X509Certificate
[salt okunur] Dil Sürümü: | ActionScript 3.0 |
Çalışma Zamanı Sürümleri: | Flash Player 11, AIR 3 |
Güvenli bir SSL/TLS bağlantısı kurulduktan sonra sunucudan alınan X.509 sertifikasını tutar. Güvenli bir bağlantı kurulmadıysa bu özellik null
olarak ayarlanır. Şu anda iOS'ta desteklenmemektedir ve bu nedenle iOS'ta null
olarak ayarlanır.
X.509 sertifikalarına ilişkin daha fazla bilgi için RFC2459 bağlantısına bakın.
Uygulama
public function get serverCertificate():X509Certificate
serverCertificateStatus | özellik |
serverCertificateStatus:String
[salt okunur] Dil Sürümü: | ActionScript 3.0 |
Çalışma Zamanı Sürümleri: | Flash Player 11, AIR 2 |
Sunucu sertifikasının durumunu döndürür.
Yuva bir sunucuya bağlanmaya çalışana kadar durum CertificateStatus.UNKNOWN
olur. Doğrulamadan sonra, durum CertificateStatus sınıfı tarafından numaralandırılan dizelerden biri olur. Bağlantı yalnızca sertifika geçerli ve güvenilir olduğunda başarılı olur. Bu nedenle, bir connect
olayından sonra serverCertificateStatus
öğesinin değeri her zaman trusted
olur.
Not: Sertifika doğrulandığında veya reddedildiğinde, durum değeri connect()
yöntemine yapılan bir sonraki çağrıya kadar güncellenmez. close()
öğesini çağırmak durum değerini "unknown" olarak sıfırlamaz.
Uygulama
public function get serverCertificateStatus():String
İlgili API Öğeleri
SecureSocket | () | Yapıcı |
public function SecureSocket()
Dil Sürümü: | ActionScript 3.0 |
Çalışma Zamanı Sürümleri: | Flash Player 11, AIR 2 |
Yeni bir SecureSocket nesnesi oluşturur.
Bir SecureSocket örneği oluşturmaya çalışmadan önce SecureSocket.isSupported
öğesini kontrol edin. SSL 3.0 veya TLS 1.0 yuvaları desteklenmiyorsa, çalışma zamanı bir IllegalOperationError atar.
Atar
IllegalOperationError — SSL 3.0 Sürümü (ve üzeri) ya da TLS 1.0 Sürümü (ve üzeri) desteklenmediğinde.
| |
SecurityError — Güvenilmeyen yerel SWF dosyaları İnternet ile iletişim kuramaz. Bu SWF dosyasını ağa sahip yerel veya güvenilir olarak yeniden sınıflandırarak bu sorunu çözebilirsiniz.
|
addBinaryChainBuildingCertificate | () | yöntem |
public function addBinaryChainBuildingCertificate(certificate:ByteArray, trusted:Boolean):void
Dil Sürümü: | ActionScript 3.0 |
Çalışma Zamanı Sürümleri: | Flash Player 11, AIR 3 |
Sisteminizin sunucu sertifikasını doğrulamak için kullandığı yerel sertifika zincirine bir X.509 sertifikası ekler. Bu sertifika geçicidir, oturum süresi boyunca geçerli olur.
Sunucunun sertifika doğrulaması, sertifika zinciri oluşturma ve doğrulama için sisteminizin kullandığı güven deposuna dayanır. Programlama yoluyla ek sertifika zincirleri ve güvenilir tutturucular eklemek için bu yöntemi kullanın.
Mac OS'de Sistem anahtarlığı, SSL/TLS el sıkışması işlemi sırasında kullanılan varsayılan anahtarlıktır. Bu anahtarlıktaki tüm ara sertifikalar, sertifika zinciri oluşturulurken eklenir.
Bu API ile eklediğiniz sertifika, DER ile kodlanmış bir X.509 sertifikası olmalıdır. trusted
parametresi doğru ise, bu API ile eklediğiniz sertifika güvenilir bir tutturucu olarak değerlendirilir.
X.509 sertifikalarına ilişkin daha fazla bilgi için RFC2459 bağlantısına bakın.
Parametreler
certificate:ByteArray — DER ile kodlanmış X.509 dijital sertifikası içeren ByteArray nesnesi.
| |
trusted:Boolean — Bu sertifikayı güven çıpası olarak atamak için true olarak ayarlayın.
|
Atar
ArgumentError — Sertifika eklenemediğinde.
|
connect | () | yöntem |
override public function connect(host:String, port:int):void
Dil Sürümü: | ActionScript 3.0 |
Çalışma Zamanı Sürümleri: | Flash Player 11, AIR 2 |
SSL veya TLS kullanarak soketi belirtilen ana bilgisayar ve bağlantı noktasına bağlar.
SecureSocket.connect()
yöntemini çağırdığınızda yuva, sunucuyla SSL/TLS el sıkışması gerçekleştirmeye çalışır. El sıkışması başarılı olursa yuva, sunucu sertifikasını doğrulamaya çalışır. Sertifika geçerli ve güvenilirse, güvenli yuva bağlantısı kurulur ve yuva bir connect
olayı gönderir. El sıkışması başarısız olursa veya sertifika doğrulanamazsa, yuva bir IOError
olayı gönderir. IOError
olayı gönderildikten sonra serverCertificateStatus
özelliğini okuyarak sertifika doğrulama sonucunu kontrol edebilirsiniz. (connect
olayı gönderildiğinde, sertifika durumu her zamantrusted
olur.)
Yuva önceden bağlanmışsa, ilk olarak varolan bağlantı kapatılır.
Parametreler
host:String — Bağlanılacak ana bilgisayarın adı veya IP adresi.
| |
port:int — Bağlanılacak bağlantı noktası numarası.
|
Olaylar
connect: — Bir ağ bağlantısı kurulduğunda gönderilir.
| |
ioError: — Bir ana bilgisayar belirtilirse ve bağlantının başarısız olmasına neden olan bir girdi/çıktı hatası meydana gelirse gönderilir. Bu, ana bilgisayarın sunucu sertifikasını başarıyla doğrulamak için SSL/TLS el sıkışması hatalarını ve başarısızlığını içerir.
| |
securityError: — Socket.connect() öğesine yapılan bir çağrı, soket ilke dosyası sunmayan bir sunucuya veya ilke dosyası, çağıran ana bilgisayarın belirtilen bağlantı noktasına erişmesine olanak vermeyen bir sunucuya bağlanmayı denerse gönderilir. İlke dosyalarıyla ilgili daha fazla bilgi için, bkz. ActionScript 3.0 Geliştirici Kılavuzunda bulunan "Web sitesi denetimleri (ilke dosyaları)" ve Flash Player Geliştirici Merkezi Konusu: Güvenlik.
|
Atar
IOError — Bir ana bilgisayar belirtmediğinizde ve bağlantı başarısız olduğunda.
| |
SecurityError — Sıfırdan düşük ya da 65535'ten yüksek bir yuva bağlantı noktası belirttiğinizde.
|
close | Olay |
flash.events.Event
özellik Event.type =
flash.events.Event.CLOSE
Dil Sürümü: | ActionScript 3.0 |
Çalışma Zamanı Sürümleri: | Flash Player 11, AIR 2 |
Sunucu, soket bağlantısını kapattığında gönderilir.
close
olayı yalnızca sunucu bağlantıyı kapattığında gönderilir; Socket.close()
yöntemini çağırdığınızda gönderilmez.
Event.CLOSE
sabiti, close
olay nesnesinin type
özelliği değerini tanımlar.
Bu olay şu özelliklere sahiptir:
Özellik | Değer |
---|---|
bubbles | false |
cancelable | false ; iptal edilecek varsayılan davranış yoktur. |
currentTarget | Bu Event nesnesini olay dinleyicisiyle etkin olarak işleyen nesne. |
target | Bağlantısı kapatılan nesne. |
connect | Olay |
flash.events.Event
özellik Event.type =
flash.events.Event.CONNECT
Dil Sürümü: | ActionScript 3.0 |
Çalışma Zamanı Sürümleri: | Flash Player 11, AIR 2 |
Bir ağ bağlantısı kurulduğunda gönderilir.
Event.CONNECT
sabiti, connect
olay nesnesinin type
özelliği değerini tanımlar.
Bu olay şu özelliklere sahiptir:
Özellik | Değer |
---|---|
bubbles | false |
cancelable | false ; iptal edilecek varsayılan davranış yoktur. |
currentTarget | Bu Event nesnesini olay dinleyicisiyle etkin olarak işleyen nesne. |
target | Ağ bağlantısı kuran Socket veya XMLSocket nesnesi. |
ioError | Olay |
flash.events.IOErrorEvent
özellik IOErrorEvent.type =
flash.events.IOErrorEvent.IO_ERROR
Dil Sürümü: | ActionScript 3.0 |
Çalışma Zamanı Sürümleri: | Flash Player 11, AIR 2 |
Bir gönderme veya alma işleminin başarısız olmasına neden olan bir girdi veya çıktı hatası ortaya çıktığında gönderilir.
Bir sunucu sertifikası onaylanamadığında, dağıtılan error olayı bir IOError öğesidir. Bu durumda, sorunun nedenini belirlemek için serverCertificateStatus
özelliğini kontrol edebilirsiniz.
ioError
olay nesnesinin type
özelliği değerini tanımlar.
Bu olay şu özelliklere sahiptir:
Özellik | Değer |
---|---|
bubbles | false |
cancelable | false ; iptal edilecek varsayılan davranış yoktur. |
currentTarget | Bu Event nesnesini olay dinleyicisiyle etkin olarak işleyen nesne. |
errorID | Belirli bir hata mesajıyla ilişkili başvuru numarası (yalnızca AIR). |
target | Girdi/çıktı hatası yaşayan network nesnesi. |
text | Hata mesajı olarak gösterilecek metin. |
securityError | Olay |
flash.events.SecurityErrorEvent
özellik SecurityErrorEvent.type =
flash.events.SecurityErrorEvent.SECURITY_ERROR
Dil Sürümü: | ActionScript 3.0 |
Çalışma Zamanı Sürümleri: | Flash Player 11, AIR 2 |
Güvenlik kısıtlaması nedeniyle SecureSocket.connect()
öğesine yapılan bir çağrı başarısız olduğunda gönderilir.
Flash Player veya AIR'de uygulama güvenlik korumalı alanının dışında çalışan kod farklı bir etki alanındaki sunucuya veya 1024'ten daha düşük bir bağlantı noktasına bağlanmaya çalıştığında ve sunucu bağlantıya izin veren bir ilke dosyası içermediğinde bir security error olayı gönderilir. AIR uygulama korumalı alanının içinde çalışan kodun herhangi bir etki alanındaki sunuculara veya 1024'den düşük bağlantı noktalarına ilke dosyası olmadan bağlanabileceğini unutmayın.
SecurityErrorEvent.SECURITY_ERROR
sabiti, securityError
olay nesnesinin type
özelliği değerini tanımlar.
Bu olay şu özelliklere sahiptir:
Özellik | Değer |
---|---|
bubbles | false |
cancelable | false ; iptal edilecek varsayılan davranış yoktur. |
currentTarget | Bu Event nesnesini olay dinleyicisiyle etkin olarak işleyen nesne. |
target | Güvenlik hatasını bildiren network nesnesi. |
text | Hata mesajı olarak gösterilecek metin. |
İlgili API Öğeleri
socketData | Olay |
flash.events.ProgressEvent
özellik ProgressEvent.type =
flash.events.ProgressEvent.SOCKET_DATA
Dil Sürümü: | ActionScript 3.0 |
Çalışma Zamanı Sürümleri: | Flash Player 11, AIR 2 |
Bir soket tarafından veri alındığında gönderilir. socketData
türündeki olaylar ProgressEvent.bytesTotal
özelliğini kullanmaz.
socketData
olay nesnesinin type
özelliği değerini tanımlar.
Bu olay şu özelliklere sahiptir:
Özellik | Değer |
---|---|
bubbles | false |
cancelable | false ; iptal edilecek varsayılan davranış yoktur. |
currentTarget | Event öğesini etkin olarak işleyen nesne. |
bytesLoaded | Dinleyici olayı işlerken yüklenen öğe veya bayt sayısı. |
bytesTotal | 0; bu özellik socketData olay nesneleri tarafından kullanılmaz. |
target | İlerlemeyi bildiren soket. |
package { import flash.display.Sprite; import flash.errors.IOError; import flash.events.Event; import flash.events.IOErrorEvent; import flash.net.SecureSocket; public class SecureSocketExample extends Sprite { private var secureSocket:SecureSocket = new SecureSocket(); public function SecureSocketExample() { secureSocket.addEventListener( Event.CONNECT, onConnect ) secureSocket.addEventListener( IOErrorEvent.IO_ERROR, onError ); try { secureSocket.connect( "208.77.188.166", 443 ); } catch ( error:Error ) { trace ( error.toString() ); } } private function onConnect( event:Event ):void { trace("Connected."); } private function onError( error:IOErrorEvent ):void { trace( error.text + ", " + secureSocket.serverCertificateStatus ); } } }
Tue Jun 12 2018, 01:09 PM Z