成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

socket庫:Python實現TCP/IP客戶和服務器通信

開發 后端
套接字除了前文用于分析網絡地址等功能之外,還可以配置一個服務器,監聽到來的消息。

[[405778]]

前言

套接字除了前文用于分析網絡地址等功能之外,還可以配置一個服務器,監聽到來的消息。

比如你在網絡上跟網絡機器人聊天,你發送數據到機器人(服務器),然后服務器反饋聊天數據信息給你。當然,機器人的回復還涉及機器學習,但簡單的消息反饋涉及的就是套接字的知識。

而且,如果你直接將服務器配置為連接到其他應用的客戶端,那么雙向通信也可以實現。(比如QQ聊天)

簡單的搭建服務器與客戶端

既然已經了解了套接字的應用。下面,我們來實現一個簡單的單向通信TCP/IP服務器與客戶端。

服務器

服務器的原理如下:

1.首先創建一個套接字,TCP是面向流的套接字。故需要使用SOCK_STREAM。

2.然后使用bind()函數將套接字與服務器地址關聯(因為我們只是在本地測試,直接將地址設置為127.0.0.1或者localhost,端口號為10000),當然你身邊如果有2臺電腦設備,可以直接替換局域網的IP地址

3.調用listen()函數將套接字設置為服務器模式,然后無限循環等待,參數為最大排隊數

4.在循環中,調用accept()等待客戶端的消息連接(當然,這里可以設置最大連接數,超過直接拒絕連接)。如果有客戶端進行連接,那么accept()函數會返回一個打開的連接與客戶端地址

5.指明一個緩沖區,該緩沖區用來存放recv函數接收到的數據

6.通過sendall()進行回傳客戶端數據。

7.傳回數據后,與當前的客戶端通信就算完成了。需要使用close()進行清理

示例代碼如下:

  1. import socket 
  2.  
  3. # 1.創建一個套接字, 
  4. sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
  5. # 2.使用bind()函數將套接字與服務器地址關聯 
  6. sock.bind(('localhost', 10000)) 
  7. # 3.調用listen()函數將套接字設置為服務器模式 
  8. sock.listen(1) 
  9.  
  10. while True
  11.     # 4.調用accept()等待客戶端的消息連接 
  12.     # 如果有客戶端進行連接,那么accept()函數會返回一個打開的連接與客戶端地址 
  13.     connection, client_address = sock.accept() 
  14.     print("連接客戶端地址:", client_address) 
  15.     try: 
  16.         # 5.指明一個緩沖區,該緩沖區用來存放recv函數接收到的數據 
  17.         data = connection.recv(1024) 
  18.         print(data) 
  19.         if data: 
  20.             # 6.通過sendall()進行回傳客戶端數據。 
  21.             connection.sendall("已接受到數據".encode()) 
  22.         else
  23.             print("客戶端沒有發送數據,不需要傳送數據"
  24.     finally: 
  25.         #7.需要使用close()進行清理 
  26.         connection.close() 

 客戶端

實現客戶端相對來說比服務器要簡單的多,因為其不需要監聽,只需要連接發送數據即可??蛻舳藢崿F主要分為:

1.創建一個套接字

2.使用connect()函數連接到服務器

3.通過sendall()向服務器發送數據

4.通過recv()接受服務器傳遞回的數據

5.交互完成之后,使用close()清理

示例如下:

  1. import socket 
  2.  
  3. # 1.創建一個套接字, 
  4. sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
  5. # 2.使用bind()函數將套接字與服務器地址關聯 
  6. sock.connect(('localhost', 10000)) 
  7.  
  8. try: 
  9.     msg = b"Are you there?" 
  10.     # 3.通過sendall()向服務器發送數據 
  11.     sock.sendall(msg) 
  12.     # 4.通過recv()接受服務器傳遞回的數據 
  13.     data = sock.recv(1024) 
  14.     print(data.decode()) 
  15. finally: 
  16.     # 5.交互完成之后,使用close()清理 
  17.     sock.close() 

 運行之后,服務器與客戶端交互效果如下:

create_connection(更簡易的客戶端)

連接服務器除了使用connect()函數之外,其實還有另一個函數create_connection()來連接服務器,它可以省略幾個步驟。示例如下:

  1. import socket 
  2.  
  3. # 獲取匹配開頭字符串的所有屬性值 
  4. def getConstants(prefix): 
  5.     return { 
  6.         getattr(socket, n): n 
  7.         for n in dir(socket) 
  8.         if n.startswith(prefix) 
  9.     } 
  10.  
  11. ipproto_str = getConstants("IPPROTO_"
  12. family_str = getConstants("AF_"
  13. type_str = getConstants("SOCK_"
  14.  
  15. sock = socket.create_connection(('127.0.0.1', 10000)) 
  16. print(ipproto_str[sock.proto]) 
  17. print(family_str[sock.family]) 
  18. print(type_str[sock.type]) 
  19.  
  20. try: 
  21.     msg = b"Are you there?" 
  22.     sock.sendall(msg) 
  23.     data = sock.recv(1024) 
  24.     print(data.decode()) 
  25. finally: 
  26.     sock.close() 

 運行之后,效果如下:

create_connection()函數的原理是使用getaddrinfo()函數查找候選連接的參數,并返回一個打開的socket。getaddrinfo()函數的講解在上一篇socket庫。

 

責任編輯:姜華 來源: 今日頭條
相關推薦

2018-12-20 08:50:53

TCPIP服務器

2010-03-19 09:26:34

Java Socket

2009-02-12 15:51:00

squid代理服務器web服務器

2011-08-17 10:42:43

iPhone應用

2010-01-11 13:05:24

VNC server配

2010-08-26 10:01:50

DHCP服務器

2010-03-01 16:10:32

Linux Samba

2018-04-12 10:55:41

Android服務器數據

2011-03-28 17:24:26

2023-04-26 07:36:44

緩存雪崩服務器架構

2018-10-31 12:51:04

2009-02-12 14:12:00

2009-02-17 18:36:59

存儲虛擬化服務器虛擬化虛擬化

2011-10-25 07:32:13

存儲服務器虛擬化

2010-09-03 10:27:30

AMDARM

2014-04-09 14:08:44

VDI存儲服務器技術

2014-07-14 15:52:08

VDI

2016-01-28 10:04:10

虛擬化

2013-03-12 10:01:46

ARMPC服務器

2012-05-07 13:55:41

JavaJava Web
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩精品一区二区三区中文在线 | 久久99精品久久久 | 91免费在线 | 免费视频一区二区 | 男女黄网站 | 黄色毛片在线播放 | 99热视| 免费视频色 | 亚洲国产片| 国产99精品 | 国产精品久久久久aaaa九色 | 亚洲欧美一区二区三区国产精品 | 99精品久久久国产一区二区三 | 国产原创在线观看 | 久草色播| www.99热这里只有精品 | 欧美日韩综合视频 | 99精品在线| 亚洲精品乱码久久久久久9色 | 欧美一区二区三区免费在线观看 | 欧美精品一区二区三区在线 | 精品免费国产视频 | 国产精品99久久久久久宅男 | av在线视| 精品乱子伦一区二区三区 | 美日韩免费视频 | 国产伦精品一区二区三区高清 | 日日干夜夜操 | 在线看一区二区三区 | 91精品国产综合久久婷婷香蕉 | 亚洲成人久久久 | 亚洲成人一区二区 | 99国产精品99久久久久久 | 亚洲欧美久久 | 日韩在线视频一区 | 亚洲欧美在线观看视频 | 久久99久久| 一区二区三区不卡视频 | 天堂久 | 国产精品3区 | 秋霞性生活 |