天天看點

Socket 套接字協定

A network socket is an internal endpoint for sending or receiving data within a node on a computer network. Concretely, it is a representation of this endpoint in networking software (protocol stack), such as an entry in a table (listing communication protocol, destination, status, etc.), and is a form of system resource.

HTTP協定:簡單對象通路協定,對應于應用層 ,同時HTTP協定也是基于TCP連接配接的;主要解決如何包裝資料。

TCP協定: 對應于傳輸層協定

ip協定:對應于網絡層TCP/IP是傳輸層協定,主要解決資料如何在網絡中傳輸;

Socket:是對TCP/IP和UDP的封裝,Socket本身并不是協定,而是一個調用接口,通過Socket,我們才能使用TCP/IP協定。

Socket 套接字協定

概念有混亂的主要原因是每個人的網絡需求不同,使用網絡關心資料内容,傳輸速度,資訊安全都涉及到整個通信過程,但影響的主要因子不太一樣,而且本身也不斷在發生變化。WebSocket protocol 是HTML5一種新的協定。它實作了浏覽器與伺服器全雙工通信(full-duplex)。一開始的握手需要借助HTTP請求完成。socket/套接字起源于20世紀70年代,是加利福利亞大學的伯克利版本UNIX(稱為BSD UNIX)的一部分。目的是實作主機上運作的一個程式與另一個運作的程式進行通信。

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

又名套接字,是為特定網絡協定(例如TCP/IP,ICMP/IP,UDP/IP等)套件對上的網絡應用程式提供者提供目前可移植标準的對象。它們允許程式接受并進行連接配接,如發送和接受資料。為了建立通信通道,網絡通信的每個端點擁有一個套接字對象極為重要。

三種最流行的套接字類型是:stream,datagram和raw。stream和datagram套接字可以直接與TCP協定進行接口,raw套接字則接口到IP協定。Python 提供了兩個基本的 socket 子產品。第一個是 Socket,它提供了标準的 BSD Sockets API。第二個是 SocketServer, 它提供了伺服器中心類,可以簡化網絡伺服器的開發。

# Helloworld
pip install socket           

複制

#!/usr/bin/env python
import socket

TCP_IP = '127.0.0.1'
TCP_PORT = 5005
BUFFER_SIZE = 1024

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((TCP_IP, TCP_PORT))
s.listen(1)

conn, addr = s.accept()
print('Connection address:', addr)
while True:
    data = conn.recv(BUFFER_SIZE)
    if not data: continue
    print("received data:", data)
    conn.send(data)
conn.close()           

複制

#!/usr/bin/env python
import socket

TCP_IP = '127.0.0.1'
TCP_PORT = 5005
BUFFER_SIZE = 1024
MESSAGE = b"Hello, World!"

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((TCP_IP, TCP_PORT))
s.send(MESSAGE)
data = s.recv(BUFFER_SIZE)
s.close()

print("received data:", data)           

複制

Connection address: ('127.0.0.1', 59227)

received data: b'Hello, World!'

https://www.zhihu.com/question/39541968

https://blog.csdn.net/jerry81333/article/details/53137863

https://wiki.python.org/moin/TcpCommunication

https://docs.python.org/3/library/socket.html