Socket模組學習

來源:互聯網
上載者:User

標籤:des   style   blog   http   color   os   io   使用   ar   

Socket是什麼呢?
     Socket是應用程式層與TCP/IP協議族通訊的中間軟體抽象層,它是一組介面。在設計模式中,Socket其實就是一個門面模式,它把複雜的TCP/IP協議族隱藏在Socket介面後面,對使用者來說,一組簡單的介面就是全部,讓Socket去組織資料,以符合指定的協議。

如何使用socket?

  先從伺服器端說起。伺服器端先初始化Socket,然後與連接埠綁定(bind),對連接埠進行監聽(listen),調用accept阻塞,等待用戶端串連。在這時如果有個用戶端初始化一個Socket,然後串連伺服器(connect),如果串連成功,這時用戶端與伺服器端的串連就建立了。用戶端發送資料請求,伺服器端接收請求並處理請求,然後把回應資料發送給用戶端,用戶端讀取資料,最後關閉串連,一次互動結束。

建立socket對象

socket.socket(family=AF_INET, type=SOCK_STREAM)

  family的值可以是AF_UNIX(Unix域,用於同一台機器上的進程間通訊),也可以是AF_INET(對於IPV4協議的TCP和UDP)

  type參數可以為SOCK_STREAM(流通訊端)或者 SOCK_DGRAM(資料報文通訊端),SOCK_RAW(raw通訊端)。

Socket對象的主要屬性和方法:

socket.bind(address)

  address一般情況下為一個雙元素元組, ((host,port)) ,主機名稱或者ip地址+連接埠號碼。

socket.listen(backlog)

  socket的監聽串連數,定義了最大隊列,最大值依賴於主系統(一般情況下為5)

socket.accept()

  調用accept方法時,socket會進入‘waiting‘(或阻塞)狀態。客戶請求串連時,方法建立串連並返回伺服器。accept方法返回一個含有倆個元素的元組,形如(connection,address)。第一個元素(connection)是新的socket對象,伺服器通過它與客戶通訊;第二個元素(address)是客戶的internet地址。

socket.connect(address)

  串連到address定義的遠程socket

socket.send(bytes[, flags])

  發送資訊到遠程socket

socket.recv(bufsize[, flags])

  

  伺服器端通過socket擷取data資訊,bufsize定義了一次性接收的最大值

  

TCP

Server.py

import sockets = socket.socket(socket.AF_INET,socket.SOCK_STREAM)s.bind(("",8081))s.listen(1)while True:     connection,address = s.accept()    data = connection.recv(1024)    print(‘Received:‘,data)

 Client.py

import socketfrom pip.backwardcompat import raw_inputs=socket.socket(socket.AF_INET,socket.SOCK_STREAM)port = 8081host = "localhost"s.connect((host,port))while True:    msg = raw_input()    s.send(bytes(msg,‘utf-8‘))    s.close()

 

 

UDP

server端代碼

import sockets = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)s.bind(("",8081))while True:     data,host=s.recvfrom(1024)    print(‘Received:‘,data,‘from‘,host)

 Client端代碼

import socketfrom pip.backwardcompat import raw_inputs=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)port = 8081host = "localhost"while True:    msg = raw_input()    print(msg)    s.sendto(bytes(msg,encoding = "utf-8"), (host, port))

 

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.