導航:首頁 > 操作系統 > linuxsocketpython

linuxsocketpython

發布時間:2023-03-20 13:02:05

㈠ 求助關於python 的socket.timeout: timed out錯誤問題:

最好是先設置好超時時間
socket.setdefaulttimeout 或者urllib2.socket.setdefaulttimeout
來設置默認超時時間
也可以直接指定
urlopen(url, data=None, timeout=<object object>)
我在win下也寫過python腳本,一旦except到了指定錯誤,腳本標會退出
這樣不會出錯
try:
pass
except:
do something
但不是你的本意了
linux操作是沒有這個問題的

希望可以幫到你

㈡ Python 之 Socket編程(TCP/UDP)

socket(family,type[,protocal]) 使用給定的地址族、套接字類型、協議編號(默認為0)來創建套接字。

有效的埠號: 0~ 65535
但是小於1024的埠號基本上都預留給了操作系統
POSIX兼容系統(如Linux、Mac OS X等),在/etc/services文件中找到這些預留埠與的列表

面向連接的通信提供序列化、可靠的和不重復的數據交付,而沒有記錄邊界。意味著每條消息都可以拆分多個片段,並且每個消息片段都能到達目的地,然後將它們按順序組合在一起,最後將完整的信息傳遞給等待的應用程序。
實現方式(TCP):
傳輸控制協議(TCP), 創建TCP必須使用SOCK_STREAM作為套接字類型
因為這些套接字(AF_INET)的網路版本使用網際網路協議(IP)來搜尋網路中的IP,
所以整個系統通常結合這兩種協議(TCP/IP)來進行網路間數據通信。

數據報類型的套接字, 即在通信開始之前並不需要建議連接,當然也無法保證它的順序性、可靠性或重復性
實現方式(UDP)
用戶數據包協議(UDP), 創建UDP必須使用SOCK_DGRAM (datagram)作為套接字類型
它也使用網際網路來尋找網路中主機,所以是UDP和IP的組合名字UDP/IP

注意點:
1)TCP發送數據時,已建立好TCP連接,所以不需要指定地址。UDP是面向無連接的,每次發送要指定是發給誰。
2)服務端與客戶端不能直接發送列表,元組,字典。需要字元串化repr(data)。

TCP的優點: 可靠,穩定 TCP的可靠體現在TCP在傳遞數據之前,會有三次握手來建立連接,而且在數據傳遞時,有確認、窗口、重傳、擁塞控制機制,在數據傳完後,還會斷開連接用來節約系統資源。

TCP的缺點: 慢,效率低,佔用系統資源高,易被攻擊 TCP在傳遞數據之前,要先建連接,這會消耗時間,而且在數據傳遞時,確認機制、重傳機制、擁塞控制機制等都會消耗大量的時間,而且要在每台設備上維護所有的傳輸連接,事實上,每個連接都會佔用系統的CPU、內存等硬體資源。 而且,因為TCP有確認機制、三次握手機制,這些也導致TCP容易被人利用,實現DOS、DDOS、CC等攻擊。

什麼時候應該使用TCP : 當對網路通訊質量有要求的時候,比如:整個數據要准確無誤的傳遞給對方,這往往用於一些要求可靠的應用,比如HTTP、HTTPS、FTP等傳輸文件的協議,POP、SMTP等郵件傳輸的協議。 在日常生活中,常見使用TCP協議的應用如下: 瀏覽器,用的HTTP FlashFXP,用的FTP Outlook,用的POP、SMTP Putty,用的Telnet、SSH QQ文件傳輸.

UDP的優點: 快,比TCP稍安全 UDP沒有TCP的握手、確認、窗口、重傳、擁塞控制等機制,UDP是一個無狀態的傳輸協議,所以它在傳遞數據時非常快。沒有TCP的這些機制,UDP較TCP被攻擊者利用的漏洞就要少一些。但UDP也是無法避免攻擊的,比如:UDP Flood攻擊……

UDP的缺點: 不可靠,不穩定 因為UDP沒有TCP那些可靠的機制,在數據傳遞時,如果網路質量不好,就會很容易丟包。

什麼時候應該使用UDP: 當對網路通訊質量要求不高的時候,要求網路通訊速度能盡量的快,這時就可以使用UDP。 比如,日常生活中,常見使用UDP協議的應用如下: QQ語音 QQ視頻 TFTP ……

㈢ linux python connect 對同一個埠可以建立多少個

如果是tcp client用同一個本地埠去連不同的兩個伺服器ip,連第二個時就會提示埠已被佔用。但伺服器的監聽埠,可以accept多次,建立多個socket;我的問題是伺服器一個埠為什麼能建立多個連敗櫻接而客戶端卻不行呢?

TCP server 可以,TCP client 也可以。一個套接字只能建立一個連接,無論對於 server 還是 client。
注意報錯消息是:
[Errno 106] (EISCONN) Transport endpoint is already connected
man 2 connect 說得很清楚了:
Generally, connection-based protocol sockets may successfully connect() only once; connectionless protocol sockets may use connect() multiple times to change their association.
就是說,TCP 套接字最多隻能調用 connect 一次。那麼,你的監聽套接字調用 connect 了幾次?
來點有意思的。
一個套接字不能連接兩次,並不代表一個本地地址不能用兩次,看!****加粗文字**加做並粗文字**
>>> import socket
>>> s = socket.socket()
# since Linux 3.9, 見 man 7 socket
>>> s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1)
>>> s2 = socket.socket()
>>> s2.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1)
>>> s.bind(('127.0.0.1', 12345))
>>> s2.bind(('127.0.0.1', 12345))
# 都可以使用同一本地地址來連接哦
>>> s.connect(('127.0.0.1', 80))
>>> s2.connect(('127.0.0.1', 4321))
>>> netstat -npt | grep 12345
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
tcp 0 0 127.0.0.1:4321 127.0.0.1:12345 ESTABLISHED 18284/python3
tcp 0 0 127.0.0.1:12345 127.0.0.1:4321 ESTABLISHED 4568/python3
tcp 0 0 127.0.0.1:80 127.0.0.1:12345 ESTABLISHED -
tcp 0 0 127.0.0.1:12345 127.0.0.1:80 ESTABLISHED 4568/python3

你們這些有女友的都弱爆了啦 :-(
更新:大家來玩 TCP: 一個人也可以建立 TCP 連接呢 - 依雲's Blog
2015年08月19日回答 · 2015年08月19日更新

依雲21.1k 聲望

答案對人有幫助,有參考價值1答案沒幫助,是錯誤的答案,答非所問
內核是以一個(著名的)5元信息組來標識不同的socket的:源地址、源埠、目的地址、目的埠、協議號。任何一個不同,都不叫「同一個socket」。
2015年08月20日回答

sched_yield80 聲望
答案對人有幫察胡叢助,有參考價值0答案沒幫助,是錯誤的答案,答非所問
首先,TCP鏈接是可靠的端對端的鏈接,每個TCP鏈接由4個要素組成:2組IP地址(本地和遠端),2組埠地址(本地和遠端)。其中如果需要跟埠信息綁定時,都需要調用bind函數,如果server端針對2個同樣的IP、埠組進行同樣的綁定時,第2次同樣是不成功的。
2015年08月16日回答

charliecui2.4k 聲望
答案對人有幫助,有參考價值0答案沒幫助,是錯誤的答案,答非所問
有個相關的問題: ftp的數據傳輸,伺服器會用20埠主動連接客戶端,如果兩個客戶端同時在一下載東西,那ftp 伺服器能用20埠去連接兩個ip ?(這時ftp的伺服器其實是tcp里的客戶端)
2015年08月16日回答

編輯

hyanleo163 聲望
+1
能啊,看我的實驗。
依雲 · 2015年08月19日

不管是伺服器還是客戶端,建立TCP鏈接,同一個埠都只能使用一次。
這句話其實是**錯的**!
對於TCP協議,要成功建立一個新的鏈接,需要保證新鏈接四個要素組合體的唯一性:客戶端的IP、客戶端的port、伺服器端的IP、伺服器端的port。也就是說,伺服器端的同一個IP和port,可以和同一個客戶端的多個不同埠成功建立多個TCP鏈接(與多個不同的客戶端當然也可以),只要保證【Server IP + Server Port + Client IP + Client Port】這個組合唯一不重復即可。
> netstat -a -n -p tcp |grep 9999
tcp 0 0 127.0.0.1:51113 127.0.0.1:9999 ESTABLISHED 2701/nc
tcp 0 0 127.0.0.1:51119 127.0.0.1:9999 ESTABLISHED 2752/nc

上述結果127.0.0.1:9999中9999埠成功建立兩個TCP鏈接,也就可以理解。
**客戶端**發送TCP鏈接請求的埠,也就是後續建立TCP鏈接使用的埠,所以一旦TCP鏈接建立,埠就被佔用,無法再建立第二個鏈接。
而**伺服器端**有兩類埠:偵聽埠 和 後續建立TCP鏈接的埠。其中偵聽埠只負責偵聽客戶端發送來的TCP鏈接請求,不用作建立TCP鏈接使用,一旦偵聽到有客戶端發送TCP鏈接請求,就分配一個埠(一般隨機分配,且不會重復)用於建立TCP鏈接,而不是所說的伺服器一個埠能建立多個連接。
上述描述也比較片面,客戶端如何請求及建立鏈接,伺服器端如何偵聽及是否分配新隨機埠等...應該都可以在應用層面進行控制,所以上述描述可以作為建立TCP鏈接的一種方式,僅供參考。
一些英文的參考:
How do multiple clients connect simultaneously to one port, say 80, on a server?
TCP : two different sockets sharing a port?

------------------------------------------------------------------------------------
提升linux下tcp伺服器並發連接數限制 2012-12-02 20:30:23

1、修改用戶進程可打開文件數限制
在Linux平台上,無論編寫客戶端程序還是服務端程序,在進行高並發TCP連接處理時,最高的並發數量都要受到系統對用戶單一進程同時可打開文件數量的限制(這是因為系統為每個TCP連接都要創建一個socket句柄,每個socket句柄同時也是一個文件句柄)。可使用ulimit命令查看系統允許當前用戶進程打開的文件數限制:
[speng@as4 ~]$ ulimit -n
1024
這表示當前用戶的每個進程最多允許同時打開1024個文件,這1024個文件中還得除去每個進程必然打開的標准輸入,標准輸出,標准錯誤,伺服器監聽 socket,進程間通訊的unix域socket等文件,那麼剩下的可用於客戶端socket連接的文件數就只有大概1024-10=1014個左右。也就是說預設情況下,基於Linux的通訊程序最多允許同時1014個TCP並發連接。
對於想支持更高數量的TCP並發連接的通訊處理程序,就必須修改Linux對當前用戶的進程同時打開的文件數量的軟限制(soft limit)和硬限制(hardlimit)。其中軟限制是指Linux在當前系統能夠承受的范圍內進一步限制用戶同時打開的文件數;硬限制則是根據系統硬體資源狀況(主要是系統內存)計算出來的系統最多可同時打開的文件數量。通常軟限制小於或等於硬限制。
修改上述限制的最簡單的辦法就是使用ulimit命令:
[speng@as4 ~]$ ulimit -n
上述命令中,在中指定要設置的單一進程允許打開的最大文件數。如果系統回顯類似於「Operation notpermitted」之類的話,說明上述限制修改失敗,實際上是因為在中指定的數值超過了Linux系統對該用戶打開文件數的軟限制或硬限制。因此,就需要修改Linux系統對用戶的關於打開文件數的軟限制和硬限制。
第一步,修改/etc/security/limits.conf文件,在文件中添加如下行:
speng soft nofile 10240
speng hard nofile 10240
其中speng指定了要修改哪個用戶的打開文件數限制,可用'*'號表示修改所有用戶的限制;soft或hard指定要修改軟限制還是硬限制;10240則指定了想要修改的新的限制值,即最大打開文件數(請注意軟限制值要小於或等於硬限制)。修改完後保存文件。

第二步,修改/etc/pam.d/login文件,在文件中添加如下行:
session required /lib/security/pam_limits.so
這是告訴Linux在用戶完成系統登錄後,應該調用pam_limits.so模塊來設置系統對該用戶可使用的各種資源數量的最大限制(包括用戶可打開的最大文件數限制),而pam_limits.so模塊就會從/etc/security/limits.conf文件中讀取配置來設置這些限制值。修改完後保存此文件。
第三步,查看Linux系統級的最大打開文件數限制,使用如下命令:
[speng@as4 ~]$ cat /proc/sys/fs/file-max
12158
這表明這台Linux系統最多允許同時打開(即包含所有用戶打開文件數總和)12158個文件,是Linux系統級硬限制,所有用戶級的打開文件數限制都不應超過這個數值。通常這個系統級硬限制是Linux系統在啟動時根據系統硬體資源狀況計算出來的最佳的最大同時打開文件數限制,如果沒有特殊需要,不應該修改此限制,除非想為用戶級打開文件數限制設置超過此限制的值。修改此硬限制的方法是修改/etc/rc.local腳本,在腳本中添加如下行:
echo 22158 > /proc/sys/fs/file-max
這是讓Linux在啟動完成後強行將系統級打開文件數硬限制設置為22158。修改完後保存此文件。
完成上述步驟後重啟系統,一般情況下就可以將Linux系統對指定用戶的單一進程允許同時打開的最大文件數限制設為指定的數值。如果重啟後用 ulimit- n命令查看用戶可打開文件數限制仍然低於上述步驟中設置的最大值,這可能是因為在用戶登錄腳本/etc/profile中使用ulimit-n命令已經將用戶可同時打開的文件數做了限制。由於通過ulimit-n修改系統對用戶可同時打開文件的最大數限制時,新修改的值只能小於或等於上次ulimit-n 設置的值,因此想用此命令增大這個限制值是不可能的。所以,如果有上述問題存在,就只能去打開/etc/profile腳本文件,在文件中查找是否使用了 ulimit-n限制了用戶可同時打開的最大文件數量,如果找到,則刪除這行命令,或者將其設置的值改為合適的值,然後保存文件,用戶退出並重新登錄系統即可。
通過上述步驟,就為支持高並發TCP連接處理的通訊處理程序解除關於打開文件數量方面的系統限制。

2、修改網路內核對TCP連接的有關限制
在Linux上編寫支持高並發TCP連接的客戶端通訊處理程序時,有時會發現盡管已經解除了系統對用戶同時打開文件數的限制,但仍會出現並發TCP連接數增加到一定數量時,再也無法成功建立新的TCP連接的現象。出現這種現在的原因有多種。
第一種原因可能是因為Linux網路內核對本地埠號范圍有限制。此時,進一步分析為什麼無法建立TCP連接,會發現問題出在connect()調用返回失敗,查看系統錯誤提示消息是「Can't assign requestedaddress」。同時,如果在此時用tcpmp工具監視網路,會發現根本沒有TCP連接時客戶端發SYN包的網路流量。這些情況說明問題在於本地Linux系統內核中有限制。其實,問題的根本原因在於Linux內核的TCP/IP協議實現模塊對系統中所有的客戶端TCP連接對應的本地埠號的范圍進行了限制(例如,內核限制本地埠號的范圍為1024~32768之間)。當系統中某一時刻同時存在太多的TCP客戶端連接時,由於每個TCP客戶端連接都要佔用一個唯一的本地埠號(此埠號在系統的本地埠號范圍限制中),如果現有的TCP客戶端連接已將所有的本地埠號占滿,則此時就無法為新的TCP客戶端連接分配一個本地埠號了,因此系統會在這種情況下在connect()調用中返回失敗,並將錯誤提示消息設為「Can't assignrequested address」。有關這些控制邏輯可以查看Linux內核源代碼,以linux2.6內核為例,可以查看tcp_ipv4.c文件中如下函數:
static int tcp_v4_hash_connect(struct sock *sk)
請注意上述函數中對變數sysctl_local_port_range的訪問控制。變數sysctl_local_port_range的初始化則是在tcp.c文件中的如下函數中設置:
void __init tcp_init(void)
內核編譯時默認設置的本地埠號范圍可能太小,因此需要修改此本地埠范圍限制。

第一步,修改/etc/sysctl.conf文件,在文件中添加如下行:
net.ipv4.ip_local_port_range = 1024 65000
這表明將系統對本地埠范圍限制設置為1024~65000之間。請注意,本地埠范圍的最小值必須大於或等於1024;而埠范圍的最大值則應小於或等於65535。修改完後保存此文件。

第二步,執行sysctl命令:
[speng@as4 ~]$ sysctl -p
如果系統沒有錯誤提示,就表明新的本地埠范圍設置成功。如果按上述埠范圍進行設置,則理論上單獨一個進程最多可以同時建立60000多個TCP客戶端連接。
第二種無法建立TCP連接的原因可能是因為Linux網路內核的IP_TABLE防火牆對最大跟蹤的TCP連接數有限制。此時程序會表現為在 connect()調用中阻塞,如同死機,如果用tcpmp工具監視網路,也會發現根本沒有TCP連接時客戶端發SYN包的網路流量。由於 IP_TABLE防火牆在內核中會對每個TCP連接的狀態進行跟蹤,跟蹤信息將會放在位於內核內存中的conntrackdatabase中,這個資料庫的大小有限,當系統中存在過多的TCP連接時,資料庫容量不足,IP_TABLE無法為新的TCP連接建立跟蹤信息,於是表現為在connect()調用中阻塞。此時就必須修改內核對最大跟蹤的TCP連接數的限制,方法同修改內核對本地埠號范圍的限制是類似的:

第一步,修改/etc/sysctl.conf文件,在文件中添加如下行:
net.ipv4.ip_conntrack_max = 10240
這表明將系統對最大跟蹤的TCP連接數限制設置為10240。請注意,此限制值要盡量小,以節省對內核內存的佔用。

第二步,執行sysctl命令:
[speng@as4 ~]$ sysctl -p
如果系統沒有錯誤提示,就表明系統對新的最大跟蹤的TCP連接數限制修改成功。如果按上述參數進行設置,則理論上單獨一個進程最多可以同時建立10000多個TCP客戶端連接。

3、使用支持高並發網路I/O的編程技術
在Linux上編寫高並發TCP連接應用程序時,必須使用合適的網路I/O技術和I/O事件分派機制。
可用的I/O技術有同步I/O,非阻塞式同步I/O(也稱反應式I/O),以及非同步I/O。在高TCP並發的情形下,如果使用同步I/O,這會嚴重阻塞程序的運轉,除非為每個TCP連接的I/O創建一個線程。但是,過多的線程又會因系統對線程的調度造成巨大開銷。因此,在高TCP並發的情形下使用同步I /O 是不可取的,這時可以考慮使用非阻塞式同步I/O或非同步I/O。非阻塞式同步I/O的技術包括使用select(),poll(),epoll等機制。非同步I/O的技術就是使用AIO。

從I/O事件分派機制來看,使用select()是不合適的,因為它所支持的並發連接數有限(通常在1024個以內)。如果考慮性能,poll()也是不合適的,盡管它可以支持的較高的TCP並發數,但是由於其採用「輪詢」機制,當並發數較高時,其運行效率相當低,並可能存在I/O事件分派不均,導致部分 TCP連接上的I/O出現「飢餓」現象。而如果使用epoll或AIO,則沒有上述問題(早期 Linux內核的AIO技術實現是通過在內核中為每個I/O請求創建一個線程來實現的,這種實現機制在高並發TCP連接的情形下使用其實也有嚴重的性能問題。但在最新的Linux內核中,AIO的實現已經得到改進)。

綜上所述,在開發支持高並發TCP連接的Linux應用程序時,應盡量使用epoll或AIO技術來實現並發的TCP連接上的I/O控制,這將為提升程序對高並發TCP連接的支持提供有效的I/O保證。

㈣ python獲取系統下打開的埠

第一個問題沒啥,用0作為埠那麼就會選擇本地沒有使用的埠。
第二個要麼用python序列化的方法,只要對端用反序列化解釋就可以。要麼用自定義的,藉助於struct的pack/unpack,或者如果跟c通訊,用ctypes定義結構體也可以。看你需要了

㈤ 初學者怎麼學習Python

初學者、零基礎學Python的話,建議參加培訓班,入門快、效率高、周期短、實戰項目豐富,還可以提升就業競爭力。
以下是老男孩教育Python全棧課程內容:階段一:Python開發基礎
Python開發基礎課程內容包括:計算機硬體、操作系統原理、安裝linux操作系統、linux操作系統維護常用命令、Python語言介紹、環境安裝、基本語法、基本數據類型、二進制運算、流程式控制制、字元編碼、文件處理、數據類型、用戶認證、三級菜單程序、購物車程序開發、函數、內置方法、遞歸、迭代器、裝飾器、內置方法、員工信息表開發、模塊的跨目錄導入、常用標准庫學習,b加密\re正則\logging日誌模塊等,軟體開發規范學習,計算器程序、ATM程序開發等。
階段二:Python高級級編編程&資料庫開發
Python高級級編編程&資料庫開發課程內容包括:面向對象介紹、特性、成員變數、方法、封裝、繼承、多態、類的生成原理、MetaClass、__new__的作用、抽象類、靜態方法、類方法、屬性方法、如何在程序中使用面向對象思想寫程序、選課程序開發、TCP/IP協議介紹、Socket網路套接字模塊學習、簡單遠程命令執行客戶端開發、C\S架構FTP伺服器開發、線程、進程、隊列、IO多路模型、資料庫類型、特性介紹,表欄位類型、表結構構建語句、常用增刪改查語句、索引、存儲過程、視圖、觸發器、事務、分組、聚合、分頁、連接池、基於資料庫的學員管理系統開發等。
階段三:前端開發
前端開發課程內容包括:HTML\CSS\JS學習、DOM操作、JSONP、原生Ajax非同步載入、購物商城開發、Jquery、動畫效果、事件、定時期、輪播圖、跑馬燈、HTML5\CSS3語法學習、bootstrap、抽屜新熱榜開發、流行前端框架介紹、Vue架構剖析、mvvm開發思想、Vue數據綁定與計算屬性、條件渲染類與樣式綁定、表單控制項綁定、事件綁定webpack使用、vue-router使用、vuex單向數據流與應用結構、vuex actions與mutations熱重載、vue單頁面項目實戰開發等。
階段四:WEB框架開發
WEB框架開發課程內容包括:Web框架原理剖析、Web請求生命周期、自行開發簡單的Web框架、MTV\MVC框架介紹、Django框架使用、路由系統、模板引擎、FBV\CBV視圖、Models ORM、FORM、表單驗證、Django session & cookie、CSRF驗證、XSS、中間件、分頁、自定義tags、Django Admin、cache系統、信號、message、自定義用戶認證、Memcached、redis緩存學習、RabbitMQ隊列學習、Celery分布式任務隊列學習、Flask框架、Tornado框架、Restful API、BBS+Blog實戰項目開發等。
階段五:爬蟲開發
爬蟲開發課程內容包括:Requests模塊、BeautifulSoup,Selenium模塊、PhantomJS模塊學習、基於requests實現登陸:抽屜、github、知乎、博客園、爬取拉鉤職位信息、開發Web版微信、高性能IO性能相關模塊:asyncio、aiohttp、grequests、Twisted、自定義開發一個非同步非阻塞模塊、驗證碼圖像識別、Scrapy框架以及源碼剖析、框架組件介紹(engine、spider、downloader、scheler、pipeline)、分布式爬蟲實戰等。
階段六:全棧項目實戰
全棧項目實戰課程內容包括:互聯網企業專業開發流程講解、git、github協作開發工具講解、任務管理系統講解、介面單元測試、敏捷開發與持續集成介紹、django + uwsgi + nginx生產環境部署學習、介面文檔編寫示例、互聯網企業大型項目架構圖深度講解、CRM客戶關系管理系統開發等。
階段七:數據分析
數據分析課程內容包括:金融、股票知識入門股票基本概念、常見投資工具介紹、市基本交易規則、A股構成等,K線、平均線、KDJ、MACD等各項技術指標分析,股市操作模擬盤演示量化策略的開發流程,金融量化與Python,numpy、pandas、matplotlib模塊常用功能學習在線量化投資平台:優礦、聚寬、米筐等介紹和使用、常見量化策略學習,如雙均線策略、因子選股策略、因子選股策略、小市值策略、海龜交易法則、均值回歸、策略、動量策略、反轉策略、羊駝交易法則、PEG策略等、開發一個簡單的量化策略平台,實現選股、擇時、倉位管理、止盈止損、回測結果展示等功能。
階段八:人工智慧
人工智慧課程內容包括:機器學習要素、常見流派、自然語言識別、分析原理詞向量模型word2vec、剖析分類、聚類、決策樹、隨機森林、回歸以及神經網路、測試集以及評價標准Python機器學習常用庫scikit-learn、數據預處理、Tensorflow學習、基於Tensorflow的CNN與RNN模型、Caffe兩種常用數據源製作、OpenCV庫詳解、人臉識別技術、車牌自動提取和遮蔽、無人機開發、Keras深度學習、貝葉斯模型、無人駕駛模擬器使用和開發、特斯拉遠程式控制制API和自動化駕駛開發等。
階段九:自動化運維&開發
自動化運維&開發課程內容包括:設計符合企業實際需求的CMDB資產管理系統,如安全API介面開發與使用,開發支持windows和linux平台的客戶端,對其它系統開放靈活的api設計與開發IT資產的上線、下線、變更流程等業務流程。IT審計+主機管理系統開發,真實企業系統的用戶行為、管理許可權、批量文件操作、用戶登錄報表等。分布式主機監控系統開發,監控多個服務,多種設備,報警機制,基於http+restful架構開發,實現水平擴展,可輕松實現分布式監控等功能。
階段十:高並發語言GO開發高並發語言GO開發課程內容包括:Golang的發展介紹、開發環境搭建、golang和其他語言對比、字元串詳解、條件判斷、循環、使用數組和map數據類型、go程序編譯和Makefile、gofmt工具、godoc文檔生成工具詳解、斐波那契數列、數據和切片、make&new、字元串、go程序調試、slice&map、map排序、常用標准庫使用、文件增刪改查操作、函數和面向對象詳解、並發、並行與goroute、channel詳解goroute同步、channel、超時與定時器reover捕獲異常、Go高並發模型、Lazy生成器、並發數控制、高並發web伺服器的開發等。

㈥ python無法建立socket連接

服務端listen, bind。笑差 這留意這個host最好使用0.0.0.0。
客戶端的host要明確指向這個伺服器所在IP地址。

另外有些linux是有iptable的。 如果你開的端嫌仿口太低。比如少於1024. 或者是iptable限制外部訪問,這就沒芹升纖有辦法了。

另外你的linux是否在虛擬機上。虛擬機如果是host 模式不成的。要橋接模式才成。

不過看情況,你都ssh連接上了。 應該還是iptable限制的問題。

㈦ Linux平台下python中有什麼方法可以與一個進程通信

本文實例講解了python實現兩個程序之間通信的方法,具體方法如下:
該實例採用socket實現,與socket網路編程不一樣的是socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)的第一個參數是socket.AF_UNIX
而不是 socket.AF_INET
例中兩個python程序 s.py/c.py 要先運行s.py
基於fedora13/python2.6測試,成功實現!
s.py代碼如下:
#!/usr/bin/env python
import socket
import os

if __name__ == '__main__':
sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
conn = '/tmp/conn'
if not os.path.exists(conn):
os.mknod(conn)
if os.path.exists(conn):
os.unlink(conn)
sock.bind(conn)
sock.listen(5)
while True:
connection,address = sock.accept()
data = connection.recv(1024)
if data == "hello,server":
print "the client said:%s!\n" % data
connection.send("hello,client")
connection.close()

c.py代碼如下:
#!/usr/bin/env python
import socket
import time

if __name__ == '__main__':
sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
conn = '/tmp/conn'
sock.connect(conn)
time.sleep(1)
sock.send('hello,server')
print sock.recv(1024)
sock.close()

㈧ mac os x 下的python 為什麼沒有epoll

介紹
從2.6版本開始, python 提供了使用linux epoll 的功能. 這篇文章通過3個例子來大致介紹如何使用它. 歡迎提問和反饋.

阻塞式socket通訊
第一個例子是一個簡單的python3.0版本的伺服器代碼, 監聽8080埠的http請求, 列印結果到命令行, 回應http response給客戶端.

行 9: 建立伺服器的socket
行 10: 允許11行的bind()操作, 即使其他程序也在監聽同樣的埠. 不然的話, 這個程序只能在其他程序停止使用這個埠之後的1到2分鍾後才能執行.
行 11: 綁定socket到這台機器上所有IPv4地址上的8080埠.
行 12: 告訴伺服器開始響應從客戶端過來的連接請求.
行 14: 程序洞畢會一直停在這里, 直弊顫碧到建立了一個連接. 這個時候, 伺服器socket會建立一個新的socket, 用來和客戶端通訊. 這個新的socket是accept()的返回值, address對象標示了客戶端的IP地址和埠.
行 15-17: 接收數據, 直到一個完整的http請求被接收完畢. 這是一個簡單的http伺服器實現.
行 18: 為了方便驗證, 列印客戶端過來的請求到命令行.
行 19: 發送回應.
行 20-22: 關閉連接, 以及伺服器的監聽socket.
python官方 HOWTO 裡面有具體如何使用socket編程的描述.

1 import socket
2
3 EOL1 = b'\n\n'
4 EOL2 = b'\n\r\n'
5 response = b'HTTP/1.0 200 OK\r\nDate: Mon, 1 Jan 1996 01:01:01 GMT\r\n'
6 response += b'Content-Type: text/plain\r\nContent-Length: 13\r\n\r\n'
7 response += b'Hello, world!'
8
9 serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
10 serversocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
11 serversocket.bind(('0.0.0.0', 8080))
12 serversocket.listen(1)
13
14 connectiontoclient, address = serversocket.accept()
15 request = b''
16 while EOL1 not in request and EOL2 not in request:
17 request += connectiontoclient.recv(1024)
18 print(request.decode())
19 connectiontoclient.send(response)
20 connectiontoclient.close()
21
22 serversocket.close()

第租舉2個例子, 我們在15行加上了一個循環, 用來循環處理客戶端請求, 直到我們中斷這個過程(在命令行下面輸入鍵盤中斷, 比如Ctrl-C). 這個例子更明顯地表示出來了, 伺服器socket並沒有用來做數據處理, 而是接受伺服器過來的連接, 然後建立一個新的socket, 用來和客戶端通訊.

最後的23-24行確保伺服器的監聽socket最後總是close掉, 即使出現了異常.

1 import socket
2
3 EOL1 = b'\n\n'
4 EOL2 = b'\n\r\n'
5 response = b'HTTP/1.0 200 OK\r\nDate: Mon, 1 Jan 1996 01:01:01 GMT\r\n'
6 response += b'Content-Type: text/plain\r\nContent-Length: 13\r\n\r\n'
7 response += b'Hello, world!'
8
9 serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
10 serversocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
11 serversocket.bind(('0.0.0.0', 8080))
12 serversocket.listen(1)
13
14 try:
15 while True:
16 connectiontoclient, address = serversocket.accept()
17 request = b''
18 while EOL1 not in request and EOL2 not in request:
19 request += connectiontoclient.recv(1024)
20 print('-'*40 + '\n' + request.decode()[:-2])
21 connectiontoclient.send(response)
22 connectiontoclient.close()
23 finally:
24 serversocket.close()

非同步socket和linux epoll的優勢
第2個例子裡面的socket採用的是阻塞方式, 因為python解釋器在出現事件之前都處在停止狀態. 16行的accept()一直阻塞, 直到新的連接進來. 19行的recv()也是一直阻塞, 直到從客戶端收到數據(或者直到沒有數據可以接收). 21行的send()也一直阻塞, 直到所有需要發送給客戶端的數據都交給了linux內核的發送隊列.

當一個程序採用阻塞socket的時候, 它經常採用一個線程(甚至一個進程)一個socket通訊的模式. 主線程保留伺服器監聽socket, 接受進來的連接, 一次接受一個連接, 然後把生成的socket交給一個分離的線程去做交互. 因為一個線程只和一個客戶端通訊, 在任何位置的阻塞都不會造成問題. 阻塞本身不會影響其他線程的工作.

多線程阻塞socket模式代碼清晰, 但是有幾個缺陷, 可能很難確保線程間資源共享工作正常, 可能在只有一個CPU的機器上效率低下.

C10K(單機1萬連接問題!) 探討了其他處理並行socket通訊的模式. 一種是採用非同步socket. socket不會阻塞, 直到特定事件發生. 程序在非同步socket上面進行一個特定操作, 並且立即得到一個結果, 不管執行成功或者失敗. 然後讓程序決定下一步怎麼做. 因為非同步socket是非阻塞的, 我們可以不採用多線程. 所有的事情都可以在一個線程裡面完成. 雖然這種模式有它需要面對的問題, 它對於特定程序來說還是不錯的選擇. 也可以和多線程合起來使用: 單線程的非同步socket可以當作伺服器上面處理網路的一個模塊, 而線程可以用來訪問阻塞式的資源, 比如資料庫.

Linux 2.6有一些方式來管理非同步socket, python API能夠用的有3種: select, poll和epoll. epoll和poll比select性能更好, 因為python程序不需要為了特定的事件去查詢單獨的socket, 而是依賴操作系統來告訴你什麼socket產生了什麼事件. epoll比poll性能更好, 因為它不需要每次python程序查詢的時候, 操作系統都去檢查所有的socket, 在事件產生的時候, linux跟蹤他們, 然後在python程序調用的時候, 返回具體的列表. 所以epoll在大量(上千)並行連接下, 是一種更有效率, 伸縮性更強的機制. 圖示.

採用epoll的非同步socket編程示例
採用epoll的程序一般這樣操作:

建立一個epoll對象
告訴epoll對象, 對於一些socket監控一些事件.
問epoll, 從上次查詢以來什麼socket產生了什麼事件.
針對這些socket做特定操作.
告訴epoll, 修改監控socket和/或監控事件.
重復第3步到第5步, 直到結束.
銷毀epoll對象.
採用非同步socket的時候第3步重復了第2步的事情. 這里的程序更復雜, 因為一個線程需要和多個客戶端交互.

行 1: select模塊帶有epoll功能
行 13: 因為socket默認是阻塞的, 我們需要設置成非阻塞(非同步)模式.
行 15: 建立一個epoll對象.
行 16: 注冊伺服器socket, 監聽讀取事件. 伺服器socket接收一個連接的時候, 產生一個讀取事件.
行 19: connections表映射文件描述符(file descriptors, 整型)到對應的網路連接對象上面.
行 21: epoll對象查詢一下是否有感興趣的事件發生, 參數1說明我們最多等待1秒的時間. 如果有對應事件發生, 立刻會返回一個事件列表.
行 22: 返回的events是一個(fileno, event code)tuple列表. fileno是文件描述符, 是一個整型數.
行 23: 如果是伺服器socket的事件, 那麼需要針對新的連接建立一個socket.
行 25: 設置socket為非阻塞模式.
行 26: 注冊socket的read(EPOLLIN)事件.
行 31: 如果讀取事件發生, 從客戶端讀取新數據.
行 33: 一旦完整的http請求接收到, 取消注冊讀取事件, 注冊寫入事件(EPOLLOUT), 寫入事件在能夠發送數據回客戶端的時候產生.
行 34: 列印完整的http請求, 展示即使通訊是交錯的, 數據本身是作為一個完整的信息組合和處理的.
行 35: 如果寫入事件發生在一個客戶端socket上面, 我們就可以發送新數據到客戶端了.
行s 36-38: 一次發送一部分返回數據, 直到所有數據都交給操作系統的發送隊列.
行 39: 一旦所有的返回數據都發送完, 取消監聽讀取和寫入事件.
行 40: 如果連接被明確關閉掉, 這一步是可選的. 這個例子採用這個方法是為了讓客戶端首先斷開, 告訴客戶端沒有數據需要發送和接收了, 然後讓客戶端斷開連接.
行 41: HUP(hang-up)事件表示客戶端斷開了連接(比如 closed), 所以伺服器這端也會斷開. 不需要注冊HUP事件, 因為它們都會標示到注冊在epoll的socket.
行 42: 取消注冊.
行 43: 斷開連接.
行s 18-45: 在這里的異常捕捉的作用是, 我們的例子總是採用鍵盤中斷來停止程序執行.
行s 46-48: 雖然開啟的socket不需要手動關閉, 程序退出的時候會自動關閉, 明確寫出來這樣的代碼, 是更好的編碼風格.

閱讀全文

與linuxsocketpython相關的資料

熱點內容
速影tv 官網 瀏覽:673
主角第一個召喚的是妲己 瀏覽:6
導通濾波演算法 瀏覽:285
那個網站可以看到所有的影片 瀏覽:228
蘋果手機怎麼把app放到一起分開 瀏覽:185
如何優化伺服器內存 瀏覽:546
韓國愛情推理片完整版 瀏覽:899
鎖步雙冗餘單片機 瀏覽:577
一本都市小說男主獲得了火龍令 瀏覽:121
台灣女同性戀電影,女主角老年才和愛人在一起 瀏覽:69
女大男小之忘年戀新聞 瀏覽:962
類似渣夫的百惠娘的文 瀏覽:990
主角在現代建國的小說 瀏覽:31
一念天堂 電影 瀏覽:62
編譯原理語法分析收獲 瀏覽:135
小仙兒音頻網盤鏈接 瀏覽:718
有本小說主角叫齊天 瀏覽:136
聊齋電影有哪些 瀏覽:499
精通linux設備驅動開發 瀏覽:691
男主姓霍女主角簡寧 瀏覽:115