博客專欄

        EEPW首頁 > 博客 > python視頻教程之socket使用實例詳解

        python視頻教程之socket使用實例詳解

        發布人:only1 時間:2020-09-23 來源:工程師 發布文章

          今天扣丁學堂給大家詳細介紹一下關于python視頻教程之socket使用實例,首先Python在網絡通訊方面功能強大,學習一下Socket通訊的基本方式吧。下面我們一起來看一下吧。

          UDP通訊:


          Server:


          importsocket


          port=8081


          s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)


          #從指定的端口,從任何發送者,接收UDP數據


          s.bind(('',port))


          print('正在等待接入...')


          whileTrue:


          #接收一個數據


          data,addr=s.recvfrom(1024)


          print('Received:',data,'from',addr)


          Client:


          importsocket


          port=8081


          host='localhost'


          s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)


          s.sendto(b'hello,thisisatestinfo!',(host,port))


          很簡單。下面是TCP方式:


          Server:


          #-*-coding:utf-8-*-


          fromsocketimport*


          fromtimeimportctime


          HOST=''


          PORT=12345


          BUFSIZ=1024


          ADDR=(HOST,PORT)


          sock=socket(AF_INET,SOCK_STREAM)


          sock.bind(ADDR)


          sock.listen(5)


          whileTrue:


          print('waitingforconnection')


          tcpClientSock,addr=sock.accept()


          print('connectfrom',addr)


          whileTrue:


          try:


          data=tcpClientSock.recv(BUFSIZ)


          except:


          print(e)


          tcpClientSock.close()


          break


          ifnotdata:


          break


          s='Hi,yousendme:[%s]%s'%(ctime(),data.decode('utf8'))


          tcpClientSock.send(s.encode('utf8'))


          print([ctime()],':',data.decode('utf8'))


          tcpClientSock.close()


          sock.close()


          Client:


          #-*-coding:utf-8-*-


          fromsocketimport*


          classTcpClient:


          HOST='127.0.0.1'


          PORT=12345


          BUFSIZ=1024


          ADDR=(HOST,PORT)


          def__init__(self):


          self.client=socket(AF_INET,SOCK_STREAM)


          self.client.connect(self.ADDR)


          whileTrue:


          data=input('>')


          ifnotdata:


          break


          self.client.send(data.encode('utf8'))


          data=self.client.recv(self.BUFSIZ)


          ifnotdata:


          break


          print(data.decode('utf8'))


          if__name__=='__main__':


          client=TcpClient()


          上面的TCP方式有個問題,不能退出,好吧,我們改造一下,使這個程序可以發送quit命令以退出:


          Server:


          #-*-coding:utf-8-*-


          fromsocketimport*


          fromtimeimportctime


          fromtimeimportlocaltime


          importtime


          HOST=''


          PORT=1122#設置偵聽端口


          BUFSIZ=1024


          ADDR=(HOST,PORT)


          sock=socket(AF_INET,SOCK_STREAM)


          sock.bind(ADDR)


          sock.listen(5)


          #設置退出條件


          STOP_CHAT=False


          whilenotSTOP_CHAT:


          print('等待接入,偵聽端口:%d'%(PORT))


          tcpClientSock,addr=sock.accept()


          print('接受連接,客戶端地址:',addr)


          whileTrue:


          try:


          data=tcpClientSock.recv(BUFSIZ)


          except:


          #print(e)


          tcpClientSock.close()


          break


          ifnotdata:


          break


          #python3使用bytes,所以要進行編碼


          #s='%s發送給我的信息是:[%s]%s'%(addr[0],ctime(),data.decode('utf8'))


          #對日期進行一下格式化


          ISOTIMEFORMAT='%Y-%m-%d%X'


          stime=time.strftime(ISOTIMEFORMAT,localtime())


          s='%s發送給我的信息是:%s'%(addr[0],data.decode('utf8'))


          tcpClientSock.send(s.encode('utf8'))


          print([stime],':',data.decode('utf8'))


          #如果輸入quit(忽略大小寫),則程序退出


          STOP_CHAT=(data.decode('utf8').upper()=="QUIT")


          ifSTOP_CHAT:


          break


          tcpClientSock.close()


          sock.close()


          Client:


          #-*-coding:utf-8-*-


          fromsocketimport*


          classTcpClient:


          #測試,連接本機


          HOST='127.0.0.1'


          #設置偵聽端口


          PORT=1122


          BUFSIZ=1024


          ADDR=(HOST,PORT)


          def__init__(self):


          self.client=socket(AF_INET,SOCK_STREAM)


          self.client.connect(self.ADDR)


          whileTrue:


          data=input('>')


          ifnotdata:


          break


          #python3傳遞的是bytes,所以要編碼


          self.client.send(data.encode('utf8'))


          print('發送信息到%s:%s'%(self.HOST,data))


          ifdata.upper()=="QUIT":


          break


          data=self.client.recv(self.BUFSIZ)


          ifnotdata:


          break


          print('從%s收到信息:%s'%(self.HOST,data.decode('utf8')))


          if__name__=='__main__':


          client=TcpClient()


          以上就是關于python模塊之socket實例的詳細介紹,最后想要了解更多關于Python發展前景趨勢,請關注扣丁學堂官網、微信等平臺,扣丁學堂IT職業在線學習教育平臺為您提供權威的Python培訓視頻教程系統,通過千鋒扣丁學堂金牌講師在線錄制的第一套自適應Python在線視頻課程系統,讓你快速掌握Python從入門到精通開發實戰技能。扣丁學堂Python技術交流群:816572891。

        *博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。



        關鍵詞:

        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 茶陵县| 双桥区| 将乐县| 大厂| 石狮市| 泰州市| 合作市| 随州市| 内丘县| 栖霞市| 阳山县| 长宁县| 八宿县| 阿合奇县| 宝山区| 漳浦县| 凤冈县| 甘谷县| 新闻| 香港| 齐河县| 海晏县| 德格县| 习水县| 安陆市| 广饶县| 唐山市| 都兰县| 甘洛县| 高密市| 鄂尔多斯市| 方山县| 巩留县| 兰溪市| 于田县| 开原市| 涡阳县| 溆浦县| 淳化县| 泽州县| 土默特左旗|