首頁 > 後端開發 > Python教學 > Python socket網路程式設計TCP/IP伺服器與客戶端通信

Python socket網路程式設計TCP/IP伺服器與客戶端通信

高洛峰
發布: 2017-02-23 16:33:58
原創
1993 人瀏覽過

Python socket網路程式設計

初學python,前段時間買了兩本書《python 程式設計從入門到實作》《Python 核心程式設計第三版》,第一本書主要講的是一些基本語法和一些基本的使用方法,而第二本則深入很多,自己看來也是一知半解,剛好看到了這部分網絡編程,依然有好多不太理解的地方,不過想來透過自己不斷的摸索,不斷地搜尋資料學習,早晚應該會變得通透吧.......

這部分主要使用的模組就是socket 模組,在這個模組中可以找到socket ()函數,函數用於建立套接字對象,套接字也有自己的方法集,這些方法可以實現基於套接字的網路通訊。

socket()模組函數

要建立套接字,必須使用socket.socket()函數,他一般的語法如下

socket(socket_family, socket_type, protocol=0)
登入後複製

其中socket_family是AF_UNIX或AF_INET,socket_type 是SOCK_STREAM 或SOCK_DGRAM,protocol 通常省略,預設=0.

所以建立TCP/IP 套接字,可以使用下面的方式呼叫socket.socket().

tcpSock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
登入後複製

同樣建立UDP/IP 套接字,使用下面的方法呼叫

#
udpSock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
登入後複製

建立TCP 伺服器

#建立TCP 伺服器的流程基本上如下,並非正真正的程式碼

ss = socket()          #创建服务器套接字
    ss.bind()              #套接字与地址绑定
    ss.listen()             #监听连接
    inf_loop:             #服务器无限循环
        cs = ss.accepr()   #接受客户端连接
        comm_loop:      #通信循环
            cs.recv()/cs.send()   #对话(接收/发送)
        cs.close()        #关闭客户端套接字
    ss.close()            #关闭服务器套接字(可选)
登入後複製

實際上建立TCP 伺服器基本流程就如上邊所說,可能稍有不同但基本思路應該是相通的,下邊是真正穿件伺服器的程式碼:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from socket import *      #将 socket 属性引入到命名空间

HOST = ''          #这是对 bind()方法的标识表示可以使用任何可用的地址
PORT = 21571      #端口号
BUFSIZ = 1024     #缓冲区大小,1kb
ADDR = (HOST,PORT)   #地址????

tcpSerSocket = socket(AF_INET,SOCK_STREAM)    #创建 tcp 套接字
tcpSerSocket.bind(ADDR)           #将地址绑定到套接字上
tcpSerSocket.listen(5)            #设置并启动套接字监听

while True:        #无限循环,等待客户端连接
  print('waiting for connection...')   
  tcpCliSocket,addr = tcpSerSocket.accept()    #被动接受客户端连接     
  print('...connected from:',addr)

  while True:      #对话循环,等待客户端发送消息
    data = tcpCliSocket.recv(BUFSIZ)   #接收客户端消息
    if not data:     #如果消息是空白,跳出对话循环,关闭当前连接
      break
    tcpCliSocket.send(data)   #如果收到消息,将消息原封不动返回客户端

  tcpCliSocket.close()
tcpSerSocket.close()
登入後複製

建立TCP 用戶端

同上邊一樣,一個簡單的非程式碼流程

cs = socket()    #创建客户端套接字
    cs.connect()     #尝试连接服务器
    comm_loop:     #通信循环
        cs.send()/cs.recv()  #对话(发送/接收)
    cs.close()       #关闭客户端套接字
登入後複製

實際上建立客戶端也是翻譯上邊的步驟

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from socket import *

HOST = 'localhost'    #服务器的主机名
PORT = 21571     #端口号
BUFSIZ = 1024     #缓冲区
ADDR = (HOST,PORT)   #地址

tcpCliSocket = socket(AF_INET,SOCK_STREAM)  #创建客户端套接字
tcpCliSocket.connect(ADDR)     #连接服务器

while True:        #通信循环
  data = input('> ')    #客户端输入信息
  if not data:   #如果输入信息为空,则跳出循环,关闭通信
    break

  data = str.encode(data)      
  tcpCliSocket.send(data)   #发送客户端信息
  data = tcpCliSocket.recv(BUFSIZ)   #接受服务器返回信息
  if not data:    #如果服务器未返回信息,关闭通信循环
    break
  print('get:',data.decode('utf-8'))

tcpCliSocket.close()
登入後複製

當然,這只是最基礎的通信,而且關於主機名,端口號之類的東西暫時還不是很懂,目前所做的只是在同一台電腦上通信,端口號也需要一致,如果不同的電腦進行通信該怎麼做?我還只是個小白.....

感謝閱讀,希望能幫助大家,謝謝大家對本站的支持!

更多Python socket網路程式設計TCP/IP伺服器與客戶端通訊相關文章請關注PHP中文網!


相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板