Penggunaan fungsi SETSOCKOPT pada PHP

Socket juga dikenal sebagai "socket", aplikasi ini biasanya dikeluarkan oleh "socket" untuk permintaan jaringan atau network respon permintaan, sehingga proses antara host atau antara komputer di dapat berkomunikasi.

Bagian ini adalah semua yang kami terima bahasa Perl cara menggunakan layanan Socket.


membuat server

  • Gunakan fungsisocket untuk membuat layanan socket.

  • Gunakan fungsimengikat untuk mengikat pelabuhan.

  • Gunakanmendengarkan mendengarkan fungsi pelabuhan.

  • Gunakanmenerima fungsi menerima permintaan klien.

Membuat klien

  • Gunakan fungsisocket untuk membuat layanan socket.

  • Menggunakan fungsiconnect untuk menghubungkan ke server socket.

Bagan berikut ini merupakan arus komunikasi antara klien dan server:

Penggunaan fungsi SETSOCKOPT pada PHP


Fungsi Server soket

fungsi socket

Perl, kita menggunakan fungsi socket () untuk membuat socket, sintaks adalah sebagai berikut:

socket( SOCKET, DOMAIN, TYPE, PROTOCOL );

parameter analisis:

  • Menentukan protokol mengatur soket DOMAIN dibuat. Sebagai contoh:

    • use Socket     # 定义了 PF_INET 和 SOCK_STREAM
      
      socket(SOCKET,PF_INET,SOCK_STREAM,(getprotobyname('tcp'))[2]);
      
      3 menunjukkan protokol jaringan IPv4
    • use Socket     # 定义了 PF_INET 和 SOCK_STREAM
      
      socket(SOCKET,PF_INET,SOCK_STREAM,(getprotobyname('tcp'))[2]);
      
      4 untuk IPv6
    • use Socket     # 定义了 PF_INET 和 SOCK_STREAM
      
      socket(SOCKET,PF_INET,SOCK_STREAM,(getprotobyname('tcp'))[2]);
      
      5 mewakili soket lokal (menggunakan file)
  • Jenis TYPE socket dapat koneksi-oriented atau connectionless ke SOCK_STREAM atau SOCK_DGRAM

  • PROTOKOL harus(getprotobyname ( 'tcp')) [2].Tentukan protokol transport yang sebenarnya.

Jadi fungsi socket panggilan sebagai berikut:

use Socket     # 定义了 PF_INET 和 SOCK_STREAM

socket(SOCKET,PF_INET,SOCK_STREAM,(getprotobyname('tcp'))[2]);

bind () function

Gunakan mengikat () menetapkan alamat ke soket:

bind( SOCKET, ADDRESS );

Socket descriptor socket. ALAMAT alamat socket (TCP / IP) mengandung tiga unsur:

  • Alamat keluarga (TCP / IP, adalah AF_INET, pada sistem Anda mungkin 2)

  • Nomor port (seperti 21)

  • alamat jaringan (seperti 10.12.12.168)

Setelah menggunakan socket () menciptakan socket, hanya memberikan protokol yang mereka gunakan dan tidak memberikan alamat. Sebelum menerima koneksi host lain, Anda harus terlebih dahulu memanggil bind () menetapkan alamat ke soket.

contoh sederhana adalah sebagai berikut:

use Socket        # 定义了 PF_INET 和 SOCK_STREAM

$port = 12345;    # 监听的端口
$server_ip_address = "10.12.12.168";
bind( SOCKET, pack_sockaddr_in($port, inet_aton($server_ip_address)))
   or die "无法绑定端口! \n";

atau mati di alamat mengikat gagal eksekusi.

Dengan menetapkan pilihan SO_REUSEADDR setsockopt () untuk mengatur port dapat digunakan kembali segera.

pack_sockaddr_in () fungsi untuk mengkonversi alamat ke format biner.

mendengarkan () fungsi

Ketika soket dan alamat mengikat, mendengarkan () fungsi akan mulai mendengarkan permintaan sambungan mungkin. Namun, ini hanya dapat menjamin aliran data yang dapat diandalkan ketika menggunakan:

listen( SOCKET, QUEUESIZE );

SOCKET: deskriptor soket.

QUEUESIZE: integer adalah keputusan untuk memantau ukuran antrian, ketika ada permintaan sambungan tiba, itu akan memasuki mendengarkan antrian, ketika permintaan koneksi adalah menerima () untuk menerima, dihapus dari monitor antrian, ketika antrian penuh, koneksi baru permintaan akan kembali kesalahan.

Setelah sambungan diterima, itu kembali 0 untuk sukses, kesalahan kembali -1.

menerima () function

menerima () fungsi menerima permintaan koneksi soket. Jika berhasil dalam bentuk terkompresi alamat jaringan, jika tidak maka kembali PALSU:

accept( NEW_SOCKET, SOCKET );

SOCKET: deskriptor soket.

ALAMAT: ADDRESS adalah alamat soket (TCP / IP) mengandung tiga unsur:

  • Alamat keluarga (TCP / IP, adalah AF_INET, pada sistem Anda mungkin 2)

  • Nomor port (seperti 21)

  • alamat jaringan (seperti 10.12.12.168)

menerima () yang biasanya diterapkan dalam loop tak terbatas:

while(1) {
   accept( NEW_SOCKET, SOCKT );
   .......
}

Contoh di atas dapat memantau secara real time untuk permintaan klien.


fungsi klien

menghubungkan () fungsi

menghubungkan () system call untuk mendirikan sebuah soket parameter koneksi file descriptor dan alamat host.

Socket juga dikenal sebagai "socket", aplikasi ini biasanya dikeluarkan oleh "socket" untuk permintaan jaringan atau network respon permintaan, sehingga proses antara host atau antara komputer di dapat berkomunikasi.


socket () function

Python, kita menggunakan fungsi socket () untuk membuat socket, sintaks adalah sebagai berikut:

socket.socket([family[, type[, proto]]])

parameter

  • Keluarga: keluarga dapat membuat soket atau AF_INET AF_UNIX
  • Jenis: Jenis Socket dapat koneksi-oriented atau connectionless ke SOCK_STREAM atau SOCK_DGRAM
  • protokol: Umumnya tidak mengisi default ke nol.

Socket objek (built-in) metode

fungsideskripsiServer sokets.bind ()alamat mengikat (host, port) ke soket di AF_INET, dalam bentuk tuple (host, port) menunjukkan alamat.s.listen ()Mulai TCP mendengarkan. backlog ditentukan sebelum menolak koneksi, sistem operasi dapat menangguhkan jumlah maksimum koneksi. Nilai ini setidaknya 1, sebagian besar aplikasi dapat diatur untuk 5.s.accept ()penerimaan pasif koneksi client TCP (blocking) menunggu kedatangansoket kliens.connect ()Aktif menginisialisasi koneksi TCP Server. alamat umum format tupel (hostname, port), jika kesalahan sambungan, kesalahan dikembalikan socket.error.s.connect_ex ()menghubungkan () versi diperpanjang dari fungsi mengembalikan kode kesalahan ketika kesalahan bukan melemparkan pengecualianSocket fungsi kepentingan umums.recv ()Menerima data TCP, data dikembalikan sebagai string, menentukan jumlah maksimum data yang akan diterima BUFSIZE. Memberikan informasi tambahan tentang bendera pesan biasanya dapat diabaikan.s.send ()Mengirim data TCP, mengirimkan data string untuk koneksi soket. Nilai kembali adalah jumlah byte untuk mengirim, jumlah ini mungkin kurang dari string byte.s.sendall ()Lengkap pengiriman data TCP, mengirimkan data TCP lengkap. Ini mengirimkan data string untuk koneksi soket, namun sebelum kembali akan mencoba untuk mengirim semua data. Berhasil kembali ada, kegagalan eksepsi dilemparkan.s.recvform ()Menerima data UDP () mirip dengan recv, tapi nilai kembali (data, alamat). Dimana data adalah string yang berisi data yang diterima, alamat data dikirimkan alamat socket.s.sendto ()Mengirim data UDP, mengirim data ke soket, alamat adalah dalam bentuk (ipaddr, port) tupel ditentukan alamat remote. Nilai kembali adalah jumlah byte yang dikirim.s.close ()Menutup sokets.getpeername ()Mengembalikan koneksi socket alamat remote. Nilai kembali biasanya tuple (ipaddr, port).s.getsockname ()Mengembalikan alamat soket sendiri. Biasanya tuple (ipaddr, port)s.setsockopt (tingkat, OPTNAME, nilai)Mengatur nilai opsi socket yang diberikan.s.getsockopt (tingkat, OPTNAME [.buflen])Nilai kembali dari opsi socket.s.settimeout (timeout)Set batas waktu operasi socket, batas waktu adalah angka floating-point, dalam hitungan detik. Tidak ada nilai menunjukkan tidak ada batas waktu. Umumnya, batas waktu hanya harus membuat satu set socket, karena mereka dapat digunakan untuk mengoperasikan koneksi (seperti connect ())s.gettimeout ()Mengembalikan nilai dari batas waktu saat ini, di detik, jika tidak ada batas waktu yang ditetapkan, kembali ada.s.fileno ()Mengembalikan file descriptor socket.s.setblocking (flag)Jika bendera adalah 0, soket diatur ke mode non-blocking, jika soket ke modus blocking (nilai default). mode non-blocking, jika Anda memanggil recv () tidak menemukan data apapun, atau mengirim () panggilan tidak bisa langsung mengirim data, akan menyebabkan pengecualian socket.error.s.makefile ()Buat dokumen yang relevan sehubungan dengan soket

contoh sederhana

server

Kami menggunakan fungsi socket modulsocket untuk membuat objek socket.objek socket dapat memanggil fungsi-fungsi lainnya untuk mendirikan layanan socket.

Sekarang kita dapat menentukan layanan dengan memanggilmengikat (nama host, port) fungsiport (port).

Selanjutnya, kita sebut menerimametode objek socket. Metode menunggu untuk koneksi klien dan kembali objekkoneksiyang mewakili terhubung ke klien.

Kode lengkap adalah sebagai berikut:

#!/usr/bin/python3
# 文件名:server.py

# 导入 socket、sys 模块
import socket
import sys

# 创建 socket 对象
serversocket = socket.socket(
            socket.AF_INET, socket.SOCK_STREAM) 

# 获取本地主机名
host = socket.gethostname()

port = 9999

# 绑定端口
serversocket.bind((host, port))

# 设置最大连接数,超过后排队
serversocket.listen(5)

while True:
    # 建立客户端连接
    clientsocket,addr = serversocket.accept()      

    print("连接地址: %s" % str(addr))
    
    msg='欢迎访问本教程!'+ "\r\n"
    clientsocket.send(msg.encode('utf-8'))
    clientsocket.close()

klien

Berikutnya kita menulis klien sederhana untuk menghubungkan ke contoh layanan yang dibuat di atas. nomor port adalah 12345.

socket.connect (hosname, port) metode membuka koneksi TCP ke host untuk porthostnameke penyedia layanan pelabuhan.Setelah terhubung kita dapat mengirim-data dari server, ingat, setelah selesai operasi harus menutup sambungan.

Kode lengkap adalah sebagai berikut:

#!/usr/bin/python3
# 文件名:client.py

# 导入 socket、sys 模块
import socket
import sys

# 创建 socket 对象
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 

# 获取本地主机名
host = socket.gethostname() 

# 设置端口好
port = 9999

# 连接服务,指定主机和端口
s.connect((host, port))

# 接收小于 1024 字节的数据
msg = s.recv(1024)

s.close()

print (msg.decode('utf-8'))

Sekarang kita perlu membuka terminal, terminal pertama melakukan berkas server.py:

$ python3 server.py

Terminal kedua melakukan berkas client.py:

$ python3 client.py 
欢迎访问本教程!

Ini adalah pertama kami dan kemudian buka terminal, Anda akan melihat informasi berikut adalah output: