python socket模組

來源:互聯網
上載者:User

標籤:ip地址   wait   pytho   bind   基本   上下文   most   shutdown   send   

1、socket定義:為上層軟體提供TCP/IP通訊的軟體模組

socket模組工作流程,伺服器端啟動socket,accept,即自身建立一個串連執行個體維護串連狀態,擷取一個用戶端串連執行個體,等待串連。用戶端調用socket,進行串連connect即建立一個串連執行個體。

2、在本地類比用戶端串連過程,見下例。

首先遇到常見錯誤

import socketserversock = socket.socket() #serversock.bind((‘192.168.148.212‘,9999,))#注意這裡的連接埠需要intserversock.bind((‘127.0.0.0‘,9999,))serversock.listen(3)#啟動監聽排隊coninstance,ipadd = serversock.accept()print (ipadd,‘o---o‘,coninstance)  >>>  RESTART: C:/Users/Administrator/AppData/Local/Programs/Python/Python35-32/sersock.py Traceback (most recent call last):  File "C:/Users/Administrator/AppData/Local/Programs/Python/Python35-32/sersock.py", line 7, in <module>    serversock.bind((‘127.0.0.0‘,9999,))OSError: [WinError 10049] 在其上下文中,該請求的地址無效。

-*-* OSError: [WinError 10049] 在其上下文中,該請求的地址無效。

實際是由於IP地址寫的不正確導致,那麼如何查看IP和開放的連接埠呢?
a)ipconfig /all 查看本機IP地址

b) netstat -an 查看開放的IP連接埠

若果使用127.0.0.1 連接埠 5037 可能看到這樣的錯誤

-*-* OSError: [WinError 10048] 通常每個通訊端地址(協議/網路地址/連接埠)只允許使用一次。

這可能是由於這個連接埠已經被佔用導致,更換一個不常用的port,9999,不再提示此類錯誤。

 -*-* ConnectionRefusedError: [WinError 10061] 由於目標電腦積極拒絕,無法串連。

    當使用ftp測試時,關閉ftp使用命令quit。因為一旦開啟ftp 使用工作管理員或是直接關閉cmd,都是不生效的。

 a)檢查window 的server是否開啟。未開啟將其開啟。右鍵我的電腦 - 管理 - 服務 - server

 b) 檢查window的telnet服務是否開啟(socket模組 基於tcp協議),未開啟將其開啟,控制台-程式-開啟或關閉window功能-telnet用戶端和服務端

問題根因不明確 規避辦法 使用python27 問題軟體 python 3.5.1

python的2.7解譯器可能也有問題只能正常執行一次client,當第二次執行時會報10061。[WinError 10061] 由於目標電腦積極拒絕,無法串連。

     想看出用戶端和服務端串連的效果可以分別在兩個CMD命令視窗中執行server代碼和client代碼。

server代碼

import socketserver = socket.socket() server.bind((‘127.0.0.1‘,9000))server.listen(5)print (‘wait ...‘)while True:       conn,address= server.accept()    print (address,‘o---o‘,conn)

client 代碼

import socketimport timecli = socket.socket() print (cli) cli.connect((‘127.0.0.1‘,9000))print (‘2‘)time.sleep(1)#cli.close()

3、類比網路聊天時報錯,排查:1 對迴圈進行排查,正常 2 將sendall()中字串加str()處理,仍然顯示錯誤。

注意:recv和服務端的accept都是等待輸入,即如果對端無輸入,將一直等待。而且當recv處於迴圈中時,break迴圈,recv為收到輸入,迴圈終止,則recv會報錯。

         socket.error: [Errno 10053]

基本確定是在server端,server.recv(1024)處錯誤

-*-*[Errno 10057] 由於通訊端沒有串連並且(當使用一個 sendto 調用發送數 

server端

import socketimport sysimport timeserver = socket.socket() server.bind((‘127.0.0.1‘,9000))server.listen(5)print (‘wait ...‘)while True:       conint,address= server.accept()    conint.sendall(‘hello,welcome‘)    print (address,‘o---o‘,conint)    while True:        #serrecv = server.recv(1024)        ‘‘‘if serrecv == ‘remote shutdown‘:            sys.exit(0)        else:                        server.sendall(serrecv+‘good‘)‘‘‘        time.sleep(2)        server.sendall(str(server.recv(1024)+‘good‘))

client端

import socketimport timecli = socket.socket() print (cli) cli.connect((‘127.0.0.1‘,9000))print (‘2‘)sercon = cli.recv(1024)print serconwhile True:    time.sleep(1)    inp = raw_input(‘pleaes input:‘)    if inp != ‘quit‘:                 cli.sendall(str(inp))        print cli.recv(1024)    else:        breakcli.close()

錯誤原因:server.sendall(str(server.recv(1024)+‘good‘))

這裡應該使用server.accept()建立的與用戶端串連執行個體  作為對象,即conint,進行conint.recv()。

python socket模組

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.