天天看点

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