专栏首页readmeSocket 套接字协议
原创

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

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

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

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • linux nginx uwsgi installation

    readme
  • sublime homebrew configuration

    readme
  • mongodb helloworld

    readme
  • 未来网络发展方向之一:5G时代

    I just don’t love you anymore这一首可以单曲循环一星期的歌曲,此刻听来,仿佛是5G唱给TCP/IP听的。

    魏晓蕾
  • 创建Jenkins Pipeline流水账

    点击创建流水线后Jenkins会拉取GIT仓库,并且尝试寻找存在Jenkinsfile的分支,然后构建。不过不管构建是否成功,都不要管它,我们回到经典页面做进一...

    颇忒脱
  • Go语言开源项目知多少

    1. Docker 到现在,Docker几乎是Go再难找到也难以复制的一个成功案例。Docker项目在2014年9月份就拿到了C轮4000万美元融资,版本迭代速...

    李海彬
  • 7.计算机网络的发展 计算机网络发展背景 原因 阿帕网与计算机网络 通信方式 电路 报文 分组 包 交换 卡恩 瑟夫 网络控制协议 NCP TCP ip诞生发展 tcp 协议族 应用编程接口

    https://baike.baidu.com/item/%E4%BA%92%E8%81%94%E7%BD%91%E5%8F%91%E5%B1%95%E5%8F...

    noteless
  • 移动端IM开发者必读(二):史上最全移动弱网络优化方法总结

    本系列文章引用了腾讯技术专家樊华恒《海量之道系列文章之弱联网优化 gad.qq.com/article/detail/29546》的章节,感谢原作者。

    JackJiang
  • SpringMVC ResponseBody响应json数据

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    多凡
  • Go并发编程之美-互斥锁

    go语言类似Java JUC包也提供了一些列用于多线程之间进行同步的措施,比如低级的同步措施有 锁、CAS、原子变量操作类。相比Java来说go提供了独特的基于...

    加多

扫码关注云+社区

领取腾讯云代金券