前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Socket 套接字协议

Socket 套接字协议

原创
作者头像
vanguard
修改2020-03-18 17:51:11
1.4K0
修改2020-03-18 17:51:11
举报
文章被收录于专栏:vanguardvanguard

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协议。

概念有混乱的主要原因是每个人的网络需求不同,使用网络关心数据内容,传输速度,信息安全都涉及到整个通信过程,但影响的主要因子不太一样,而且本身也不断在发生变化。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, 它提供了服务器中心类,可以简化网络服务器的开发。

代码语言:shell
复制
# Helloworld
pip install socket
代码语言:python
复制
 #!/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()
代码语言:python
复制
 #!/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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档