Rumah pembangunan bahagian belakang tutorial php udp的错包问题_PHP教程

udp的错包问题_PHP教程

Jul 14, 2016 am 10:07 AM
array conf udp word bawah kod daripada tengok soalan

问题

看下面一段代码
$word = 'HELLO';
$conf = array(
array('ip'=>'10.1.146.133', 'port'=>2001),
array('ip'=>'10.1.146.133', 'port'=>2002)
);
function udpGet($word, $ip, $port)
{
$sock = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
socket_set_option($sock, SOL_SOCKET, SO_SNDTIMEO, array('sec'=>2, 'usec'=>0));
socket_set_option($sock, SOL_SOCKET, SO_RCVTIMEO, array('sec'=>2, 'usec'=>0));
 
socket_sendto($sock, $word, strlen($word), 0x100, $ip, $port);
socket_recvfrom($sock, $result, 8192, 0, $host, $port);
 
socket_close($sock);
 
return $result;
}
 
for ($i=0; $i
{
$res = udpGet($word, $conf[$i]['ip'], $conf[$i]['port']);
var_dump($res);
}
就是连续用UPD向两个server收发数据(为说明问题,这里的server使用了最简单的回射逻辑),
如果一切流程正常,客户端会收到两次‘HELLO’。但是,如果服务端出了问题呢?
目前,客户端的超时时间是2秒,假设2001端口过了3秒发数据,而2002端口无法服务,
猜下结果会是什么呢?“两个NULL!”,直觉上应该是这个答案。如果你也这么认为,
那么恭喜你,答错了。
实际的答案是:
NULL
string(5) "HELLO"
分析
使用tcpdump抓包,得到如下结果
(133为服务端,163为客户端,客户端php版本5.3.1,Linux内核2.6.16)
12:01:39.014658 IP 10.1.146.163.40678 > 10.1.146.133.2001: UDP, length 5
12:01:41.015121 IP 10.1.146.163.40678 > 10.1.146.133.2002: UDP, length 5
12:01:42.016103 IP 10.1.146.133.2001 > 10.1.146.163.40678: UDP, length 5
 
按我的想法,两个请求应该使用不同的临时端口收发,但从抓包结果看,
客户端虽然进行了两次socket_create,但实际中却使用了同一临时端口(40678)
收发数据!这就使得第二个请求收到了第一个请求的回包。
 
感觉上这应该算是个系统的BUG,从实验中发现,此问题只在部分系统中存在,
比如Linux内核2.6.32+php5.2.3就没有此问题。
解决
每次指定socket端口,进行收发。如下面的红色代码所示。
$sock = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
$sendPort = rand(10240, 60000);
socket_bind($sock, ’10.1.146.163′, $sendPort);
socket_set_option($sock, SOL_SOCKET, SO_SNDTIMEO, array(‘sec’=>2, ‘usec’=>0));
socket_set_option($sock, SOL_SOCKET, SO_RCVTIMEO, array(‘sec’=>2, ‘usec’=>0));
当然,rand的端口也有可能出现对撞,但毕竟这种机率不大,可以从很大程度上解决问题。
如果有更好的解决办法,欢迎大家交流~
 
�0�2
�0�2
 

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/477851.htmlTechArticle问题 看下面一段代码 $word = HELLO; $conf = array( array(ip=10.1.146.133, port=2001), array(ip=10.1.146.133, port=2002) ); function udpGet($word, $ip, $port) { $sock = socke...
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Penjelasan terperinci tentang cara memaparkan pembaris dalam Word dan cara mengendalikan pembaris! Penjelasan terperinci tentang cara memaparkan pembaris dalam Word dan cara mengendalikan pembaris! Mar 20, 2024 am 10:46 AM

Apabila kami menggunakan Word, untuk mengedit kandungan dengan lebih cantik, kami sering menggunakan pembaris. Anda harus tahu bahawa pembaris dalam Word termasuk pembaris mendatar dan pembaris menegak, yang digunakan untuk memaparkan dan melaraskan jidar halaman dokumen, inden perenggan, tab, dsb. Jadi, bagaimana anda memaparkan pembaris dalam Word? Seterusnya, saya akan mengajar anda cara menetapkan paparan pembaris. Pelajar yang memerlukan perlu segera mengumpulnya! Langkah-langkahnya adalah seperti berikut: 1. Mula-mula, kita perlu memaparkan perkataan pembaris Dokumen perkataan lalai tidak memaparkan perkataan pembaris Kita hanya perlu mengklik butang [Lihat] dalam perkataan. 2. Kemudian, kita cari pilihan [Pembaris] dan semaknya. Dengan cara ini, kita boleh menyesuaikan perkataan pembaris! Ya atau tidak

Bagaimana untuk menambah tandatangan tulisan tangan pada dokumen perkataan Bagaimana untuk menambah tandatangan tulisan tangan pada dokumen perkataan Mar 20, 2024 pm 08:56 PM

Dokumen Word digunakan secara meluas kerana fungsinya yang berkuasa bukan sahaja pelbagai format boleh dimasukkan ke dalam Word, seperti gambar dan jadual, dsb., tetapi kini untuk integriti dan ketulenan fail, banyak fail memerlukan tandatangan manual pada penghujungnya. daripada dokumen. Bunyinya seperti ini Bagaimana untuk menyelesaikan masalah yang rumit Hari ini saya akan mengajar anda cara menambah tandatangan tulisan tangan pada dokumen perkataan. Gunakan pengimbas, kamera atau telefon bimbit untuk mengimbas atau mengambil gambar tandatangan tulisan tangan, dan kemudian gunakan PS atau perisian penyuntingan imej lain untuk melakukan pemangkasan yang diperlukan pada imej. 2. Pilih "Sisipkan - Gambar - Dari Fail" dalam dokumen Word yang anda mahu masukkan tandatangan tulisan tangan dan pilih tandatangan tulisan tangan yang dipangkas. 3. Klik dua kali pada gambar tandatangan tulisan tangan (atau klik kanan pada gambar dan pilih "Tetapkan Format Gambar"), dan "Tetapkan Format Gambar" muncul.

Di manakah tetapan teduhan dalam perkataan? Di manakah tetapan teduhan dalam perkataan? Mar 20, 2024 am 08:16 AM

Kami sering menggunakan perkataan untuk kerja pejabat, tetapi adakah anda tahu di mana tetapan teduhan dalam perkataan? Hari ini saya akan berkongsi dengan anda langkah-langkah operasi khusus. Datang dan lihat, kawan-kawan! 1. Mula-mula, buka dokumen perkataan, pilih perenggan maklumat perenggan teks yang perlu ditambah dengan lorekan, kemudian klik butang [Mula] pada bar alat, cari kawasan perenggan, dan klik butang lungsur di sebelah kanan (seperti yang ditunjukkan dalam bulatan merah dalam rajah di bawah) ). 2. Selepas mengklik butang kotak lungsur, dalam pilihan menu timbul, klik pilihan [Border and Shading] (seperti yang ditunjukkan dalam bulatan merah dalam rajah di bawah). 3. Dalam kotak dialog pop timbul [Border and Shading], klik pilihan [Shading] (seperti yang ditunjukkan dalam bulatan merah dalam rajah di bawah). 4. Dalam lajur yang diisi, pilih warna

Bagaimana untuk melukis jadual dalam Word Bagaimana untuk melukis jadual dalam Word Mar 19, 2024 pm 11:50 PM

Word adalah perisian pejabat yang sangat berkuasa Berbanding dengan WPS, Word mempunyai lebih banyak kelebihan dalam pemprosesan terperinci Terutama apabila penerangan dokumen terlalu kompleks, secara amnya lebih bebas bimbang untuk menggunakan Word. Oleh itu, apabila anda memasuki masyarakat, anda mesti mempelajari beberapa petua menggunakan perkataan. Beberapa ketika dahulu, sepupu saya bertanya kepada saya soalan seperti ini. Saya sering melihat orang lain melukis jadual apabila menggunakan Word, dan saya berasa sangat tinggi. Saya ketawa pada masa itu Ia kelihatan seperti kandungan peringkat tinggi, tetapi sebenarnya ia hanya mengambil 3 langkah untuk beroperasi Adakah anda tahu cara melukis jadual dalam Word? 1. Buka perkataan, pilih tempat yang anda ingin masukkan jadual, dan cari pilihan "Sisipkan" dalam bar menu atas. 2. Klik pilihan "Jadual", dan kiub kecil yang padat akan muncul.

Adakah anda tahu cara menjumlahkan jadual Word? Adakah anda tahu cara menjumlahkan jadual Word? Mar 21, 2024 pm 01:10 PM

Kadangkala, kita sering menghadapi masalah mengira dalam jadual Word Secara amnya, apabila menghadapi masalah seperti itu, kebanyakan pelajar akan menyalin jadual Word ke Excel untuk pengiraan secara senyap. Adakah terdapat cara cepat untuk mengiranya? Sudah tentu ada, sebenarnya jumlahnya juga boleh dikira dalam Word. Jadi, adakah anda tahu bagaimana untuk melakukannya? Hari ini, mari kita lihat bersama-sama! Tanpa berlengah lagi, rakan-rakan yang memerlukan perlu segera mengumpulnya! Butiran langkah: 1. Mula-mula, kita buka perisian Word pada komputer dan buka dokumen yang perlu diproses. (Seperti yang ditunjukkan dalam gambar) 2. Seterusnya, kami meletakkan kursor pada sel di mana nilai yang dijumlahkan terletak (seperti yang ditunjukkan dalam gambar kemudian, kami klik [Bar Menu);

Bagaimana untuk menggaris dalam perkataan Bagaimana untuk menggaris dalam perkataan Mar 19, 2024 pm 10:49 PM

Apabila anda membuat tesis pengijazahan atau sampul resume, anda akan menulis jantina, umur, kelas dan maklumat lain pada kulit, dan membuat garis di belakangnya dan menulis maklumat anda sendiri apa yang semua orang tanya tentang cara menggaris dalam perkataan Di bawah saya akan berkongsi dengan anda langkah-langkah khusus. Mula-mula, buka dokumen pada komputer anda, klik butang [Mula] pada bar alat atas Word, dan kemudian klik butang ikon bergaris bawah di bawah huruf [U], seperti yang ditunjukkan dalam bulatan merah dalam rajah di bawah. 2. Kemudian, letakkan kursor di tempat yang anda ingin gariskan, dan kemudian tekan bar ruang pada papan kekunci Garis bawah akan muncul. Panjang garis bawah boleh dikawal mengikut bilangan ruang, seperti yang ditunjukkan dalam bulatan merah rajah di bawah.

Bagaimana untuk menggariskan dalam Word Bagaimana untuk menggariskan dalam Word Mar 20, 2024 pm 03:16 PM

Sebagai perisian pemprosesan perkataan yang sangat biasa digunakan, Word digunakan dalam kehidupan kita, belajar dan bekerja sepanjang masa. Sudah tentu, jika anda ingin menggunakan Word dengan baik untuk mengedit teks, anda mesti meletakkan asas yang baik. Jadi hari ini saya akan membawa anda untuk belajar bagaimana untuk menggariskan dalam Word Anda boleh melakukannya bersama-sama dengan editor. 1. Mula-mula, kita buka fail yang perlu kita edit Di sini kita ambil gambar berikut sebagai contoh. 2. Gunakan tetikus untuk memilih teks yang perlu kita edit Dalam tab pop timbul, kita pilih ikon [U] Operasi adalah seperti yang ditunjukkan dalam rajah: 3. Mari kita lihat kesannya: 4. Malah, kita boleh menggunakan yang lebih mudah dan lebih pantas Kaedahnya ialah menggunakan kombinasi kekunci [ctrl] + [U] pada papan kekunci untuk menambah dan mengikuti teks anda.

Bagaimana untuk mengisih nombor siri perkataan secara automatik Bagaimana untuk mengisih nombor siri perkataan secara automatik Mar 20, 2024 pm 09:20 PM

Apabila terdapat banyak kandungan dalam perkataan, akan ada banyak bab Tidak mustahil untuk kita menulis setiap bab satu persatu, sebenarnya kita boleh menggunakan perkataan nombor siri untuk menyusun secara automatik. Rakan-rakan yang tidak tahu bagaimana untuk beroperasi, datang dan pelajarinya! 1. Mula-mula, kami membuka dokumen untuk diproses pada komputer, seperti yang ditunjukkan dalam rajah di bawah: 2. Selepas membuka dokumen, pilih teks yang perlu diisih secara automatik Dalam contoh ini, pilih [Bab 1] dan [. Bab 2] dan tahan kekunci Ctrl Untuk memilih berbilang kawasan, gunakan tetikus untuk mengklik menu [Mula] Word selepas pemilihan, seperti yang ditunjukkan dalam bulatan merah dalam rajah di bawah: 3. Klik simbol segi tiga kecil. sebelah kanan nombor pada bar alat [Perenggan], dan klik dalam menu pop timbul Jenis nombor bersiri yang perlu dipilih adalah seperti yang ditunjukkan di bawah dengan anak panah merah menunjuk kepadanya.

See all articles