套接字基本概念

Socket是应用层与Tcp/ip协议族通信的中间软件抽象层,它是一组接口。在设计模式中,socket其实就是一个门面模式,它把复杂的tcp/ip协议族隐藏在socket接口后面,对用户来说,一组简单的接口就是全部,让socket去组织数据,以符合指定的协议。

socket位置:在传输层和应用层之间

套接字分为两种:

  • 基于文件型:AF_UNIX(af=address family)
  • 基于网络型:AF_INET/AF_INET6

套接字工作流程

tcp链接建立及释放

backlog syn请求进入到backlog(半连接池)

测试代码

tcp

服务端
import socket

ser = socket.socket(socket.AF_INET,socket.SOCK_STREAM) #基于流式通信
ser.bind(('127.0.0.1',8888)) #以元祖形式
ser.listen(5) #最多多少链接,半连接池
conn,addr = ser.accept() #接受链接和地址,建立一个tcp链接
msg = conn.recv(1024)
print('msg from client is ',msg.decode('utf-8'))
msg_repl = 'replay'
conn.send(msg_repl.encode('utf-8'))
conn.close()
ser.close()
客户端
import socket

cli = socket.socket(socket.AF_INET,socket.SOCK_STREAM) #基于流式通信
cli.connect(('127.0.0.1',8888)) #以元祖形式
# conn,addr = cli.accept() #接受链接和地址
msg = 'hello world'
cli.send(msg.encode('utf-8'))
data = cli.recv(1024)
print(data)
# cli.close()

udp

服务端
from socket import *
ip_port= ('127.0.0.1',8080)
buffer_size = 1024 udp_server = socket(AF_INET,SOCK_DGRAM)
udp_server.bind(ip_port) while True:
data = udp_server.recvfrom(buffer_size)
print(data)
udp_server.close()
客户端
from socket import *
ip_port= ('127.0.0.1',8080)
buffer_size = 1024 udp_server = socket(AF_INET,SOCK_DGRAM) while True:
data = udp_server.sendto('htllo'.encode('utf-8'),ip_port)
udp_server.close()

socket架构的更多相关文章

  1. JAVA通信系列一:Java Socket技术总结

    本文是学习java Socket整理的资料,供参考. 1       Socket通信原理 1.1     ISO七层模型 1.2     TCP/IP五层模型 应用层相当于OSI中的会话层,表示层, ...

  2. ndk学习16: unix domain socket

    一.UNIX Domain Socket 概念: UNIX Domain Socket是在socket架构上发展起来的用于同一台主机的进程间通讯(IPC) 特点: 1. 它不需要经过网络协议栈,不需要 ...

  3. 分布式EventBus的Socket实现 - 发布订阅

    分布式EventBus的Socket实现 - 发布订阅 在这篇文章中,EventBus实现 - 发布订阅 - XML加载 所适用的范围只是本机的事件传播,要是牵涉到多台服务器之间的事件传播就不行了,解 ...

  4. Linux下的IPC-UNIX Domain Socket【转】

    本文转载自:http://blog.csdn.net/guxch/article/details/7041052 一. 概述 UNIX Domain Socket是在socket架构上发展起来的用于同 ...

  5. php, hhvm与odp & Unix domain Socket方式

    接上一篇,复习一下 启动php或hhvm: php/sbin/php-fpm start hhvm/bin/hhvm_control start 启动nginx或lighttpd: webserver ...

  6. c++ 实时通信系统(c++socket篇)

    在上一篇简单的介绍了TCP/IP协议,在这一篇我们主要介绍socket的具体实现的函数 第一步首先我们套添加上头文件:(#pragma comment(lib, "WS2_32") ...

  7. Redis性能篇(二)CPU核和NUMA架构的影响

    Redis被广泛使用的一个很重要的原因是它的高性能.因此我们必要要重视所有可能影响Redis性能的因素.机制以及应对方案.影响Redis性能的五大方面的潜在因素,分别是: Redis内部的阻塞式操作 ...

  8. php 异步处理的gearman

    1. php 是进程处理,单线程到的,没有异步机制,在一些处理花费时间较多的情况导致用户体验较差.可以使用gearman 进行异步处理. 2. gearman 是一个异步处理的socket架构. 需要 ...

  9. Python Tornado框架(TCP层)

    Tornado在TCP层里的工作机制 上一节是关于应用层的协议 HTTP,它依赖于传输层协议 TCP,例如服务器是如何绑定端口的?HTTP 服务器的 handle_stream 是在什么时候被调用的呢 ...

随机推荐

  1. Event and Delegate

    文章著作权归作者所有.转载请联系作者,并在文中注明出处,给出原文链接. 本文原更新于作者的github博客,这里给出链接. 委托 委托的实质是一个类. // 委托定义 delegate ReturnT ...

  2. 腾讯这套SpringMvc面试题你了解多少?(面试必备)

    1.什么是 SpringMvc? 答:SpringMvc 是 spring 的一个模块,基于 MVC 的一个框架,无需中间整合层来整 2.Spring MVC 的优点: 答: 1)它是基于组件技术的. ...

  3. vue 添加旋转图片 修改css transform 值

    //点击放大图片并旋转图片 conponents组建 <template>    <!-- 过渡动画 -->    <transition name="fade ...

  4. iOS日期问题

    由于项目需要,需要获取去设备的当前时间,组成一个字符串,比如 2018年9月15日 15点30分30秒,需要转换成字符创:180915153030. 很简单的一个需求,于是就使用了日期格式话当前时间: ...

  5. Jquery中 .empty()和.append()

    jQuery empty() 方法:移除所选<div> 元素的内容: .empty()实例 jQuery append() 方法:在所选<> 元素结尾插入内容: .append ...

  6. Predict Referendum by sklearn package

    Background Last day we talk about Python Basics in Chinese. Today, we will do data analysis with pyt ...

  7. robotframework-ride支持python3

    最近发现robotframework的RIDE工具终于支持python3了,赶紧就安装了一下. 最新版本1.7.3.1基于wxPython4.0.4,此时的wxPython也是支持Python3.x的 ...

  8. 剑指offer 11:二进制中 1 的个数

    题目描述 输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示. 解题代码 法一: public class Solution { public int NumberOf1(int n) { ...

  9. 7_linux用户及权限(2)和管理

    useradd:useradd [options] USERNAME -u UID -g GID(基本组) -G GID,...(附加组) //省略号表示可以有多个,彼此之间用逗号隔开 -c &quo ...

  10. HTL里面使用sling model的时候传参问题

    Question: Can we pass in parameters? <div data-sly-use.myClass=”${ ‘mysite.myproject.HeaderCompon ...