欧美经典成人在观看线视频_嫩草成人影院_国产在线精品一区二区中文_国产欧美日韩综合二区三区

當前位置:首頁 > 軟件開發 > 正文

python實現socket通信 python不同程序間通信

python實現socket通信 python不同程序間通信

利用python實現局域網間的通信1.使用python的socket模塊吧,網上例子很多,也可以參考《python網絡編程》這本書;python中的handle是什么方...

利用python實現局域網間的通信

1.使用python的socket模塊吧,網上例子很多,也可以參考《python網絡編程》這本書;

python中的handle是什么方法

在Python中,handle是一個通用的詞,經常用于表示某個對象、資源或連接。我們可以通過handle來操作和管理這些東西。

常見的Pythonhandle有:

1.文件handles

在使用Python操作文件時,我們使用文件handles來表示文件對象。

例如:

python

f=open("file.txt")#創建一個文件handle

data=f.read()#使用handle讀取文件內容

f.close()#關閉文件handle,釋放資源

這里`f`就是文件handle,我們通過它讀取和操作文件。

2.Sockethandles

我們通過socket的handle表示Socket連接,并通過它來發送和接收數據。

例如:

python

s=socket.socket()#創建sockethandle

s.connect(("www.google.com",80))#使用handle建立連接

s.send(b"GET/HTTP/1.1\r\nHost:google.com\r\n\r\n")

data=s.recv(1024)#使用handle接收數據

這里`s`就是Socket的handle。

3.數據庫連接handles

例如用pymysql,我們通過游標cursor表示一個數據庫會話:

python

connection=pymysql.connect(...)

cursor=connection.cursor()#獲取數據庫連接handle

cursor.execute("SELECT*FROMusers")

results=cursor.fetchall()

cursor.close()#關閉handle

總的來說,在Python中,通過表示資源、對象或連接的handle,可以進行相應的操作。

handle值得注意的是:

-每次操作結束后,應及時關閉handle,以釋放資源

-多個handle可同時存在,無需關閉的操作的handle

socket服務器怎么識別不同端口

在Socket服務器中,不同的端口用于識別不同的網絡服務或應用程序。每個網絡服務或應用程序都可以通過不同的端口與服務器進行通信。

當Socket服務器啟動時,它會監聽一個或多個指定的端口。當客戶端嘗試連接到服務器時,它會使用特定的端口號來建立連接。服務器通過檢查連接請求中的目標端口號來確定客戶端請求的是哪個服務或應用程序。

一旦服務器識別出客戶端請求的服務或應用程序,它會將連接分配給相應的處理程序或線程來處理。這樣,服務器可以同時處理多個不同端口的連接請求,并為每個連接提供相應的服務。

需要注意的是,端口號是一個16位的整數,范圍從0到65535。其中,0到1023的端口號被稱為“知名端口”,用于一些常見的網絡服務,如HTTP(端口號80)、FTP(端口號21)等。而1024到65535的端口號被稱為“動態端口”,用于臨時分配給客戶端連接。

總結起來,Socket服務器通過檢查連接請求中的目標端口號來識別不同的端口,并將連接分配給相應的處理程序或線程來提供相應的服務。

Python的socket模塊中的bind

accept_thread=threading.Thread(target=accept,args=(s,))accept_thread.start()defaccept(s):whileTrue:conn,accept=s.accept()thread_send=MyThread(conn,addr)thread_recv=MyThread(conn,addr)thread_send.start()thread_recv.start()

docker 默認的socket端口

關于容器端口和主機端口的關系

首先,我們在創造容器時,如果不指定端口映射,那么這個容器時封閉的,不能與外界網絡通信。而我們一般情況下則需要指定端口映射,使得我們可以通過主機的端口訪問到容器。我們常用dockercontainerrun-p8080:80-d*progamme_name*這里我們將容器的80端口映射到主機的8080端口,之后我們就可以通過主機的8080端口訪問到容器了。如果想要公開容器的所有端口,則可以用dockercontainerrun-P系統會“隨機”分配端口到主機端口。

Socket端口配置

我們在容器內運行一個python的socket服務時,這時需要制定綁定的Ip和端口,我們需要注意的是我們雖然映射了端口到主機,但是綁定的ip不是主機的ip,而是容器內的ip,可以通過ifconfig進行查詢,或者直接使用0.0.0.0來接受所有ip的該端口請求

關于0.0.0.0和127.0.0.1和其他ip的關系

這里有個基礎知識,127.0.0.1是每臺主機的環回地址,只用來自身的網絡測試,而不會和外部通信,然后還有inet內部Ip,用于一個公網集群內的主機間的通信,外網訪問不了,公網ip一般是多臺主機共享。最后0.0.0.0則是表示所有可用的ip.

python獲取當前socket連接狀態,是連接還是斷開

socket建立連接后,你可以在上面加一個超時,如果超時異常出現就是斷開了。

另外可以用select(inlist,writelist,errorlist,timeout)的辦法,去輪詢它。超過比如60秒,就認為它超時。

在操作系統層面,你可以用netstat找到這個socket連接,看它的TCP狀態。如果到了CLOSE_WAIT,TIME_WAIT,就是對方或者是自己關閉了。如果是FIN2.。。。SEN。。或者是SYN_XXX就是還是連接或者是發送狀態中。

通常這些狀態在操作系統的TCP協議里都設置有超時。如果超時過了,它自己會關閉。然后變成WAIT狀態。