pythonTCP通信與多線程

服務端

        服務器進程首先要綁定一個端口並監聽來自其他客戶端的連接。如果某個客戶端連接過來了,服務器就與該客戶端建立Socket連接,隨後的通信就靠這個Socket連接了。所以,服務器會打開固定端口(比如80)監聽,每來一個客戶端連接,就創建該Socket連接。由於服務器會有大量來自客戶端的連接,所以,服務器要能夠區分一個Socket連接是和哪個客戶端綁定的。一個Socket依賴4項:服務器地址、服務器端口、客戶端地址、客戶端端口來唯一確定一個Socket。

import socket
import sys
import _thread
def newkehu(clientsocket,addr):
    print("連接地址: %s" % str(addr))
    msg='歡迎新客戶'+ "\r\n"
    clientsocket.send(msg.encode('gbk'))
    while True:
        print(clientsocket.recv(1024).decode('gbk'))
serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
# 綁定
serversocket.bind(('192.168.99.109', 9999))
# 設置最大連接數,超過後排隊
serversocket.listen(5)
while True:
    # 建立客戶端連接
    clientsocket,addr = serversocket.accept() 
    # 新開線程
    _thread.start_new_thread(newkehu,(clientsocket,addr))
    #clientsocket.close()

 

客戶端

        客戶端要主動發起TCP連接,必須知道服務器的IP地址和端口號。新浪網站的IP地址可以用域名www.sina.com.cn自動轉換到IP地址,但是怎麼知道新浪服務器的端口號呢?答案是作爲服務器,提供什麼樣的服務,端口號就必須固定下來。由於我們想要訪問網頁,因此新浪提供網頁服務的服務器必須把端口號固定在80端口,因爲80端口是Web服務的標準端口。其他服務都有對應的標準端口號,例如SMTP服務是25端口,FTP服務是21端口,等等。端口號小於1024的是Internet標準服務的端口,端口號大於1024的,可以任意使用。

import socket
import sys
# 創建 socket 對象
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
# 連接服務,指定主機和端口
s.connect(('192.168.99.109', 9999))
# 接收小於 1024 字節的數據
msg = s.recv(1024)
s.close()
print (msg.decode('gbk'))

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章