1. python3 socket的send方法如何發送數據
用如下代碼:
name='bruce'
s.send(b'hihi'+name.encode())
要把name變成二進制才能拼接
望採納
2. python socket 編程
位元組序 是一個處理器架構特性,用於指示像整數這樣的大數據類型內部的位元組如何排序。
大端 (bing-endian)位元組序,最大位元組地址出現在最低有效位元組(Least Significant Byte, LSB)上。
小端 (little-endian)位元組序,最低有效位元組包含最小位元組地址。
不管位元組如何排序,最高有效位元組(Most Signification Byte, MSB)總是在左邊,LSB總是在右邊。
對於TCP/IP協議棧使用 大端 位元組序。
有下面四個函數來轉換位元組序:
3. Python中socket里的.recv()函數問題
可以通過setsockopt,或者更簡單的setblocking,
settimeout設置。阻塞式的socket的recv服從這樣的規則:
當緩沖區內有數據時,立即返回所有的數據;當緩沖區內無數據時,阻塞直到緩沖區中有數據。非阻塞式的socket的recv服從的規則則是:
當緩沖區內有數據時,立即返回所有的數據;當緩沖區內無數據時,產生EAGAIN的錯誤並返回(在Python中會拋出一個異常)。兩種情況都不會返回空字元串,返回空數據的結果是對方關閉了連接之後才會出現的。
4. Python的socket編程recv(1024)為什麼收不到數據
原來Python的socket.recv(n)函數,並沒有真正將我們希望接收的數據字長n全部接收,只需要保證Python將我們希望接收的所有長度接收即可。那麼根據需求,我們自己實現一個接收的函數即可:
#------------------------------------------------------# RecvN# recv N bytes to target
#------------------------------------------------------def RecvN(socket, n):
totalContent = b''
totalRecved = 0
while totalRecved < n:
onceContent = socket.recv(n - totalRecved)print("onceContent", onceContent)totalContent += onceContent
totalRecved = len(totalContent)
return totalContent
# data = sockfd.recv(30 * 1024 + 14)
data = RecvN(sockfd, 30 * 1024 + 14)
這樣的話,就可以把我們所有需要接收的字長接收了。
5. python 3socket.sendto函數怎麼寫
for i as byte=0 to 10 dim lab as new label lab.name="lab" & i lab.location=new point(0,i*20) lab.autosize= true lab.text=i panel1.controls.add(lab) next
6. python socket中函數socket.socket( family, type)和socket(family, type)的區別
沒有區別。首先都是用socket類中的成員函數socket創建一個socket對象,這個對象有一個句柄(socket.socket的返回值,也可以理解為套接字文件指針),在socket類中有數據AF_INET成員和SOCK_STREAM成員,所以第一種形式實際上是將socket對象自身的這兩個數據成員傳遞給socket類的構造函數(即__init__()方法),而第二種形式的參數則是socket類包中定義好的變數(其實相當於C++的符攔亂號常量),跟第一種形式是等同的,因為默認值一樣。
AF_INET:表示使用TCP/IPv4版本的協議,(另外有一種是v6的,簡轎檔通常是v4)。
SOCK_STREAM:表示創建的socket是基於TCP傳輸方式帆櫻的。
7. python socket編程中listen和accept的區別
listen函數在一般在調用bind之後-調用accept之前調用,它的函數原型是:
intlisten(int sockfd, int backlog)
參數sockfd
被listen函數作用的套接字,sockfd之前由socket函數返回。在被socket函數返回的套接字fd之時,它是一個主動連接的套接字,也就是此時系統假設用戶會對這個套接字調用connect函數,期待它主動與其它進程連接,然後在伺服器編程中,用戶希望這個套接字可以接受外來的連接請求,也就是被動等待用戶來連接。由於系統默認時認為一個套接字是主動連接的,所以需要通過某種方式來告訴系統,用戶進程通過系統調用listen來完成這件事。
參數backlog
這個參數涉及到一些網路的細節。進程處理一個一個連接請求的時候,可能還存在其它的連接請求。因為TCP連接是一個過程,所以可能存在一種半連接的狀態,有時由於同時嘗試連接的用戶過多,使得伺服器進程無法快速地完成連接請求。如果這個情況出現了,伺服器進程希望內核如何處理呢?內核會在自己的進程空間里維護一個隊列以跟蹤這些完成的連接但伺服器進程還沒有接手處理或正在進行的連接,這樣的一個隊列內核不可能讓其任意大,所以必須有一個大小的上限。這個backlog告訴內核使用這個數值作為上限。
毫無疑問,伺服器進程不能隨便指定一個數值,內核有一個許可的范圍。這個范圍是實現相關的。很難有某種統一,一般這個值會小30以內。
accept函數
摘要:accept()用來接受參數s的socket連接,它的函數原型是:
intaccept(int s,struct sockaddr * addr,int * addrlen)
服務程序調用accept函數從處於監聽狀態的流套接字s的客戶連接請求隊列中取出排在最前的一個客戶請求,並且創建一個新的套接字來與客戶套接字創建連接通道,如果連接成功,就返回新創建的套接字的描述符,以後與客戶套接字交換數據的是新創建的套接字;如果失敗就返回 INVALID_SOCKET。該函數的第一個參數指定處於監聽狀態的流套接字;操作系統利用第二個參數來返回新創建的套接字的地址結構;操作系統利用第三個參數來返回新創建的套接字的地址結構的長度。
8. python socket 的rev函數怎麼接收位元組數組
import socketimport structsock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect(('localhost', 10000))values = (1, 'ab', 2.7)packer = struct.Struct('I 2s f')packed_data = packer.pack(*values)try: sock.sendall(packed_data)finally: sock.close()有個模塊叫struct,可以自定義結構體,可以這樣發送代碼。
try: import cPickle as pickleexcept: import pickleclass AA(): def a(self): print "123"ddd = AA()data = pickle.mps(ddd)還有個模塊叫pickle,可以打包任何python對象,打包的結果也可以拿到套接字里發。
9. python socket編程
通過python的網路通信支持,通過網路模塊,python程序可以非常方便地相互訪問互聯網上的HTTP服務和FTP服務等。可以直接獲取互聯網上的遠程資源,還可以向遠程資源發送GET POST請求。
計算機網路是線代通信技術與計算機技術相結合的產物,計算機網路主要可以提供
通信協議一般由三部分組成:一是語義部分,用於決定雙方對話類型;二是語法部分,用於決定雙方對話的格式;三是變化規則,用於決定通信雙方的應答關系。
應用層:與其它計算機進行通訊的一個應用,它是對應應用程序的通信服務的。有HTTP, FTP , NFS, SMTP, TELNET
表示層:這一層主要是定義數據格式及加密。如加密, ASCII
會話層:它定義了如何開始、控制和結束一個會話,包括對多個雙向消息的控制和管理,以便在只完成連續消息的一部分時可以通知應用,從而使表示層看到的數據是連續的。如 RPC,SQL
傳輸層:這層的功能包括是否選擇差錯恢復協議還是無差錯恢復協議,及在泳衣主機上對不同應用的數據流的輸入進行復用,還包括對收到的順序不對的數據包的重新排序功能,如 TCP UDP SPX
網路層:這層對端對端的包傳輸進行定義,它定義了能夠標識所有結點的邏輯地址,還定義了路由實現的方式和學習的方式。如IP
數據鏈路層:它定義了在單個鏈路上如何傳輸數據。這些協議與被討論的各種介質有關
物理層:OSI的物理層規范是有關傳輸介質的特性,這些規范通常也參考了其他組織制定的標准。
IP地址用於唯一標識網路中的一個通信實體,這個通信實體既可以是一個主機,也可以是路由器的某個埠,。而在基於IP協議的網路中傳輸數據包都必須使用IP地址來進行標識。
埠,程序與外界進行交互的出入口。
Tcp/IP通信協議是一種可靠的網路協議,他在通信的兩端建立一個socket,從而形成虛擬的網路鏈路。一旦建立了虛擬網路鏈路,兩端的程序就可以通過該鏈路進行通信。
IP 是Internet上使用的一個關鍵協議,通過IP協議,使internet成為一個允許連接不同類型的計算機和不同操作系統的網路。同時還需要TCP協議來提供可靠且無差錯的服務。
TCP協議被稱為端對端協議,這是因為他在兩台計算機的連接中起了非常重要的角色,當一台計算機需要與另外一台計算機連接時,TCP協議會讓他們之間建立一個虛擬鏈路,用於發送和接受數據。
TCP協議負責收集這些數據包,並將其按照適當的順序傳送,接收端收到數據包後將其正確的還原。TCP保證數據包在傳送過程中准確無誤。TCP協議採用重發機制,當一個通信實體發送一個消息給另外一個通信實體後,需要接收到另外一個通信實體的確認信息,如果沒有接收到該確認信息,則會重發信息。
使用socket之前,必須先創建socket對象,可通過該類的構造器來創建socket實例。
socket.socket(family = AF_INET, type= SOCK_STREAM, proto=0, fileno= None)
socket對象常用的方法:
基本步驟
創建客戶端的步驟:
小實例:服務端
客戶端:
通過這樣就可以實現socket之間的通信。