介紹:
#coding=utf-8'''筆記:通訊端:通訊端起源於20世紀79年代的加利福尼亞大學伯克利分校版本的Unix,就是我們常說的BSDunix。有的時候也叫“BSD通訊端”。開始的時候被設計為一台主機應用間的通訊,也就是處理序間通訊,也叫IPC。一般分為2種,基於檔案型的和基於網路型的。AF:地址家族PF:協議家族合法連接埠號碼是0 到65535 '''#建立一個TCP/IP通訊端 socket(socket_family, socket_type, protocol=0) #socket_family socket的類型 socket_type哪種方式傳輸tcp or udp import sockettcpSocket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)#建立一個UDP/IP通訊端udpSocket=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)'''函數 描述伺服器端通訊端函數 s.bind() 綁定地址(主機,連接埠號碼對)到通訊端s.listen() 開始 TCP 監聽s.accept() 被動接受 TCP 客戶的串連,(阻塞式)等待串連的到來用戶端通訊端函數s.connect() 主動初始化 TCP 伺服器串連s.connect_ex() connect()函數的擴充版本,出錯時返回出錯碼,而不是拋異常公用用途的通訊端函數s.recv() 接收 TCP 資料s.send() 發送 TCP 資料s.sendall() 完整發送 TCP 資料s.recvfrom() 接收 UDP 資料s.sendto() 發送 UDP 資料s.getpeername() 串連到當前通訊端的遠端的地址s.getsockname() 當前通訊端的地址s.getsockopt() 返回指定通訊端的參數s.setsockopt() 設定指定通訊端的參數s.close() 關 閉通訊端Blocking-Oriented Socket Methodss.setblocking() 設定通訊端的阻塞與非阻塞模式s.settimeout() 設定阻塞通訊端操作的逾時時間s.gettimeout() 得到阻塞通訊端操作的逾時時間面向檔案的通訊端的函數 s.fileno() 通訊端的檔案描述符s.makefile() 建立一個與該通訊端關連的檔案'''
TCP服務端
#coding:utf-8#最簡單的一個案例 一個server和一個client 的Tcp服務#用戶端:'''用戶端的運行流程:建立socket綁定連接埠開始迴圈監聽接受用戶端串連迴圈通訊關閉用戶端串連關閉socket'''#伺服器端接受用戶端的字元,並說一句話 import socketfrom time import ctime #定義幾個參數,例如地址連接埠號碼等HOST = ''PORT = 8808 #這裡是整形BUFFFERSIZE = 1024ADDR =(HOST,PORT)#print ADDR#建立並綁定tcpSockSer = socket.socket(socket.AF_INET,socket.SOCK_STREAM)tcpSockSer.bind(ADDR)tcpSockSer.listen(10) while True: print 'The TCP Server is starting....',ctime() tcpSockClt,addr=tcpSockSer.accept() print 'The client is ',addr ,'----',ctime() print tcpSockClt.recv(BUFFFERSIZE) tcpSockClt.send("Server: I am a Server !") tcpSockClt.close()tcpSockSer.close()
TCP用戶端
#coding:utf-8#python2.7'''用戶端的邏輯建立socket串連伺服器迴圈通訊收發訊息關閉socket'''import socketfrom time import ctimeHOST = '127.0.0.1'PORT = 8808BUFFERSIZE = 1024ADDR = (HOST,PORT)tcpSockClt=socket.socket(socket.AF_INET,socket.SOCK_STREAM)tcpSockClt.connect(ADDR)while True: print 'client is ready ...' tcpSockClt.send('Client: I am a Client!') data=tcpSockClt.recv(BUFFERSIZE) if not data: break print data tcpSockClt.close()