❶ python socketserver和socket的區別
區別:
1.首先介紹下socket
socket的英文原義是「孔」或「插座」。作為BSD UNIX的進程通信機制,取後一種意思。通常也
稱作"套接字",用於描述IP地址和埠,是一個通信鏈的句柄,可以用來實現不同虛擬機或不同計算機之間的通信。在Internet上的主機一 般運行了多個服務軟體,同時提供幾種服務。每種服務都打開一個Socket,並綁定到一個埠上,不同的埠對應於不同的服務。Socket正如其英文原 意那樣,像一個多孔插座。一台主機猶如布滿各種插座的房間,每個插座有一個編號,有的插座提供220伏交流電, 有的提供110伏交流電,有的則提供有線電視節目。 客戶軟體將插頭插到不同編號的插座,就可以得到不同的服務
內部調用流程為:
啟動服務端程序
執行 TCPServer.init方法,創建服務端Socket對象並綁定 IP 和 埠
執行 BaseServer.init方法,將自定義的繼承自SocketServer.BaseRequestHandler 的類 - MyRequestHandle賦值給 self.RequestHandlerClass
執行 BaseServer.server_forever 方法,While 循環一直監聽是否有客戶端請求到達 ...
當客戶端連接到達伺服器
執行 ThreadingMixIn.process_request 方法,創建一個 「線程」 用來處理請求
執行 ThreadingMixIn.process_request_thread 方法
執行 BaseServer.finish_request 方法,執行 self.RequestHandlerClass() 即:執行 自定義 MyRequestHandler 的構造方法(自動調用基類BaseRequestHandler的構造方法,在該構造方法中又會調用 MyRequestHandler的handle方法)
ForkingTCPServer
ForkingTCPServer和ThreadingTCPServer的使用和執行流程基本一致,只不過在內部分別為請求者建立 「線程」 和 「進程」。
❷ python socket recv 數據是什麼類型
Python中socket函數recv的問題!
在騰訊雲上創建您的SQL Cluster>>> »
我在寫python教程的博客,但是今天在寫socket編程的相關知識的時候,准備用下面的程序做演示代碼,本以為不會有問題,但是問題就莫名其妙的出現了!
d = s.recv(1024)
這段代碼的返回值通過使用 not d 判斷總是失敗,於是那個循環讀取的 while 就陷入了死循環,請各位幫忙看一下,謝謝!
#-*- coding:utf8 -*-
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("www.oschina.net", 80))
s.send("GET / HTTP/1.1\r\nHost:www.oschina.net\r\n\r\n")
tmp = []
while True:
d = s.recv(1024)
if not d:
break
tmp.append(d)
data = ''.join(tmp)
s.close()
header, html = data.split("\r\n\r\n", 1)
print header
with open("oschina.html", "wb") as f:
f.write(html)
❸ 怎麼用python登錄windows系統
# -*- coding:utf-8 -*-
#! python2
import wmi
def sys_version(ipaddress, user, password):
conn = wmi.WMI(computer=ipaddress, user=user, password=password)
for sys in conn.Win32_OperatingSystem():
print "Version:%s" % sys.Caption.encode("UTF8"),"Vernum:%s" % sys.BuildNumber #系統信息
print sys.OSArchitecture.encode("UTF8") # 系統的位數
print sys.NumberOfProcesses # 系統的進程數
if __name__ == '__main__':
sys_version(ipaddress="ip", user="用戶名", password="密碼")
❹ recv函數返回什麼值
recv函數返回其實際的位元組數,如果recv在時出錯,那麼它返回SOCKET_ERROR。如果recv函數在等待協議接收數據時網路中斷了,那麼它返回0。
擴展閱讀,linux recv函數詳解:
1 #include <sys/socket.h>
2 ssize_t recv(int sockfd, void *buff, size_t nbytes, int flags);
recv 的前3個參數等同於read函數。
flags參數值為0或:
flags
說明
recv
send
MSG_DONTWAIT
僅本操作非阻塞
MSG_OOB 發送或接收帶外數據
MSG_PEEK
窺看外來消息
MSG_WAITALL
等待所有數據
recv函數解析:
sockfd: 接收端套接字描述符
buff: 用來存放recv函數接收到的數據的緩沖區
nbytes: 指明buff的長度
flags: 一般置為0
1) recv先等待s的發送緩沖區的數據被協議傳送完畢,如果協議在傳送sock的發送緩沖區中的數據時出現網路錯誤,那麼recv函數返回SOCKET_ERROR
2)
如果套接字sockfd的發送緩沖區中沒有數據或者數據被協議成功發送完畢後,recv先檢查套接字sockfd的接收緩沖區,如果sockfd的接收緩
沖區中沒有數據或者協議正在接收數據,那麼recv就一起等待,直到把數據接收完畢。當協議把數據接收完畢,recv函數就把s的接收緩沖區中的數據
到buff中(注意協議接收到的數據可能大於buff的長度,所以在這種情況下要調用幾次recv函數才能把sockfd的接收緩沖區中的數據
完。recv函數僅僅是數據,真正的接收數據是協議來完成的)
3) recv函數返回其實際的位元組數,如果recv在時出錯,那麼它返回SOCKET_ERROR。如果recv函數在等待協議接收數據時網路中斷了,那麼它返回0。
4) 在unix系統下,如果recv函數在等待協議接收數據時網路斷開了,那麼調用 recv的進程會接收到一個SIGPIPE信號,進程對該信號的默認處理是進程終止。
❺ Python data,addr=recv(2048)什麼意思
data, addr = s.recv(2048)
s.recv()即socket.recv(),的返回值是一個元組(data,address)
從發送方接收數據,接收到的數據data為字元串類型,保存在data中,從對方發送過來的地址保存在addr中。2048表示一次最多接收2048個位元組。