摘要:是建立可靠連接,并且通信雙方都可以以流的形式發(fā)送數(shù)據(jù)。相對(duì),則是面向無(wú)連接的協(xié)議。測(cè)試結(jié)果用兩個(gè)命令行分別啟動(dòng)服務(wù)器和客戶端測(cè)試開(kāi)啟服務(wù)端完成一次通信
UDP
TCP是建立可靠連接, 并且通信雙方都可以以流的形式發(fā)送數(shù)據(jù)。 相對(duì)TCP, UDP則是面向無(wú)連接的協(xié)議。使用UDP協(xié)議時(shí), 不需要建立連接, 只需要知道對(duì)方的IP地址和端口號(hào), 就可以直接發(fā)數(shù)據(jù)包。 但是, 能不能到達(dá)就不知道了。
我們來(lái)看看如何通過(guò)UDP協(xié)議傳輸數(shù)據(jù)。 和TCP類似, 使用UDP的通信雙方也分為
客戶端和服務(wù)器
socket實(shí)現(xiàn)UDP通信的結(jié)構(gòu)圖
和TCP類似, 使用UDP的通信雙方也分為客戶端和服務(wù)器。 服務(wù)器首先需要綁定端口。但不需要監(jiān)聽(tīng)客戶端的連接
#server import socket #創(chuàng)建Socket時(shí), SOCK_DGRAM 指定了這個(gè)Socket的類型是UDP。 server = socket.socket(type=socket.SOCK_DGRAM) server.bind(("192.168.1.165",7890)) #不需要調(diào)用 listen() 方法, 而是直接接收來(lái)自任何客戶端的數(shù)據(jù) print("服務(wù)端已開(kāi)啟7890端口,正在等待被連接...") #recvfrom() 方法返回?cái)?shù)據(jù)和客戶端的地址與端口, 這樣, 服務(wù)器收到數(shù)據(jù)后, #直接調(diào)用 sendto() 就可以把數(shù)據(jù)用UDP發(fā)給客戶端 data,address = server.recvfrom(1024) print("client>>",data.decode("utf-8")) print("客戶端連接的socket地址:", address) server.sendto(b"drink more water!",address) server.close()UDP客戶端
客戶端使用UDP時(shí), 首先仍然創(chuàng)建基于UDP的Socket, 然后, 不需要調(diào)用 connect() , 直接通過(guò) sendto() 給服務(wù)器發(fā)數(shù)據(jù)
import socket #創(chuàng)建Socket時(shí), SOCK_DGRAM 指定了這個(gè)Socket的類型是UDP。 client = socket.socket(type=socket.SOCK_DGRAM) send_data =b"hello sheenstar" client.sendto(send_data,("192.168.1.165",7890)) re_Data,address = client.recvfrom(1024) print("server>>",re_Data.decode("utf-8")) client.close()測(cè)試結(jié)果
用兩個(gè)命令行分別啟動(dòng)服務(wù)器和客戶端測(cè)試
開(kāi)啟服務(wù)端
完成一次UDP通信
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/42577.html
摘要:我們來(lái)編寫(xiě)一個(gè)簡(jiǎn)單的服務(wù)器程序,它接收客戶端連接,回復(fù)客戶端發(fā)來(lái)的請(qǐng)求。如果一切順利,新浪的服務(wù)器接受了我們的連接,一個(gè)連接就建立起來(lái)的,后面的通信就是發(fā)送網(wǎng)頁(yè)內(nèi)容了。 TCP TCP(Transmission Control Protocol 傳輸控制協(xié)議)是一種面向連接的、可靠的、基于字節(jié)流的傳輸層通信協(xié)議,由IETF的RFC 793定義。在簡(jiǎn)化的計(jì)算機(jī)網(wǎng)絡(luò)OSI模型中,它完成第四...
摘要:一個(gè)包來(lái)了之后,到底是交給瀏覽器還是,就需要端口號(hào)來(lái)區(qū)分。每個(gè)網(wǎng)絡(luò)程序都向操作系統(tǒng)申請(qǐng)唯一的端口號(hào),這樣,兩個(gè)進(jìn)程在兩臺(tái)計(jì)算機(jī)之間建立網(wǎng)絡(luò)連接就需要各自的地址和各自的端口號(hào)。 網(wǎng)絡(luò)通信的三要素 IP 通信的時(shí)候, 雙方必須知道對(duì)方的標(biāo)識(shí), 好比發(fā)郵件必須知道對(duì)方的郵件地址。 互聯(lián)網(wǎng)上每個(gè)計(jì)算機(jī)的唯一標(biāo)識(shí)就是IP地址, 類似 123.123.123.123 。 IP地址實(shí)際上是一個(gè)32位...
摘要:協(xié)程實(shí)現(xiàn)連接在網(wǎng)絡(luò)通信中,每個(gè)連接都必須創(chuàng)建新線程或進(jìn)程來(lái)處理,否則,單線程在處理連接的過(guò)程中,無(wú)法接受其他客戶端的連接。所以我們嘗試使用協(xié)程來(lái)實(shí)現(xiàn)服務(wù)器對(duì)多個(gè)客戶端的響應(yīng)。 協(xié)程實(shí)現(xiàn)TCP連接 在網(wǎng)絡(luò)通信中,每個(gè)連接都必須創(chuàng)建新線程(或進(jìn)程) 來(lái)處理,否則,單線程在處理連接的過(guò)程中, 無(wú)法接受其他客戶端的連接。所以我們嘗試使用協(xié)程來(lái)實(shí)現(xiàn)服務(wù)器對(duì)多個(gè)客戶端的響應(yīng)。與單一TCP通信的構(gòu)架...
摘要:在一個(gè)進(jìn)程內(nèi)部,要同時(shí)干多件事,就需要同時(shí)運(yùn)行多個(gè)子任務(wù),我們把進(jìn)程內(nèi)的這些子任務(wù)稱為線程。總結(jié)一下,多任務(wù)的實(shí)現(xiàn)方式有三種多進(jìn)程模式多線程模式多進(jìn)程多線程模式線程是最小的執(zhí)行單元,而進(jìn)程由至少一個(gè)線程組成。 進(jìn)程與線程 很多同學(xué)都聽(tīng)說(shuō)過(guò),現(xiàn)代操作系統(tǒng)比如Mac OS X,UNIX,Linux,Windows等,都是支持多任務(wù)的操作系統(tǒng)。 什么叫多任務(wù)呢?簡(jiǎn)單地說(shuō),就是操作系統(tǒng)可以同時(shí)...
摘要:分布式進(jìn)程在和中,應(yīng)當(dāng)優(yōu)選,因?yàn)楦€(wěn)定,而且,可以分布到多臺(tái)機(jī)器上,而最多只能分布到同一臺(tái)機(jī)器的多個(gè)上。由于模塊封裝很好,不必了解網(wǎng)絡(luò)通信的細(xì)節(jié),就可以很容易地編寫(xiě)分布式多進(jìn)程程序。 分布式進(jìn)程 在Thread和Process中,應(yīng)當(dāng)優(yōu)選Process,因?yàn)镻rocess更穩(wěn)定,而且,Process可以分布到多臺(tái)機(jī)器上,而Thread最多只能分布到同一臺(tái)機(jī)器的多個(gè)CPU上。 Pytho...
閱讀 2793·2021-10-11 10:57
閱讀 2402·2021-08-27 16:20
閱讀 1384·2019-08-30 13:03
閱讀 1563·2019-08-30 12:50
閱讀 3336·2019-08-29 14:16
閱讀 1561·2019-08-29 11:12
閱讀 1613·2019-08-28 17:53
閱讀 2893·2019-08-27 10:58