socket架构
套接字基本概念
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架构的更多相关文章
- JAVA通信系列一:Java Socket技术总结
本文是学习java Socket整理的资料,供参考. 1 Socket通信原理 1.1 ISO七层模型 1.2 TCP/IP五层模型 应用层相当于OSI中的会话层,表示层, ...
- ndk学习16: unix domain socket
一.UNIX Domain Socket 概念: UNIX Domain Socket是在socket架构上发展起来的用于同一台主机的进程间通讯(IPC) 特点: 1. 它不需要经过网络协议栈,不需要 ...
- 分布式EventBus的Socket实现 - 发布订阅
分布式EventBus的Socket实现 - 发布订阅 在这篇文章中,EventBus实现 - 发布订阅 - XML加载 所适用的范围只是本机的事件传播,要是牵涉到多台服务器之间的事件传播就不行了,解 ...
- Linux下的IPC-UNIX Domain Socket【转】
本文转载自:http://blog.csdn.net/guxch/article/details/7041052 一. 概述 UNIX Domain Socket是在socket架构上发展起来的用于同 ...
- php, hhvm与odp & Unix domain Socket方式
接上一篇,复习一下 启动php或hhvm: php/sbin/php-fpm start hhvm/bin/hhvm_control start 启动nginx或lighttpd: webserver ...
- c++ 实时通信系统(c++socket篇)
在上一篇简单的介绍了TCP/IP协议,在这一篇我们主要介绍socket的具体实现的函数 第一步首先我们套添加上头文件:(#pragma comment(lib, "WS2_32") ...
- Redis性能篇(二)CPU核和NUMA架构的影响
Redis被广泛使用的一个很重要的原因是它的高性能.因此我们必要要重视所有可能影响Redis性能的因素.机制以及应对方案.影响Redis性能的五大方面的潜在因素,分别是: Redis内部的阻塞式操作 ...
- php 异步处理的gearman
1. php 是进程处理,单线程到的,没有异步机制,在一些处理花费时间较多的情况导致用户体验较差.可以使用gearman 进行异步处理. 2. gearman 是一个异步处理的socket架构. 需要 ...
- Python Tornado框架(TCP层)
Tornado在TCP层里的工作机制 上一节是关于应用层的协议 HTTP,它依赖于传输层协议 TCP,例如服务器是如何绑定端口的?HTTP 服务器的 handle_stream 是在什么时候被调用的呢 ...
随机推荐
- 根据文字动态计算Label高度或宽度
//根据已知的label宽度计算文字高度 CGRect rect = [reson boundingRectWithSize:CGSizeMake(label_W, 0) options:NSStri ...
- How to Make a Computer Operating System
How to Make a Computer Operating System 如何制作一个操作系统(翻译版) 原文地址:Github:How to Make a Computer Operating ...
- gitlab备份
#!/bin/bash backup_date=`date "+%Y_%m_%d"` delete_date=`date +%Y_%m_%d -d "7 days ago ...
- 线程池如何复用一个线程-- ThreadPoolExecutor的实现(未完)
任务是一组逻辑工作单元,而线程则是使任务异步执行的机制.在Java中,Runnable对象代表一个任务,Thread对象负责创建一个线程执行这个任务. 前提:1. 程序需要处理大量任务 2. 任务的执 ...
- macbook突然没有声音了
我百度了一下 说是苹果系统的一个bug,这是因为 Mac OS X 的核心音频守护进程「coreaudiod」出了问题,虽然简单的重启电脑就能解决,但是如果此时开启了很多程序后者有其他情况不想重启电脑 ...
- Java面向对象内存分析
title: Java面向对象内存分析 date: 2018-07-28 11:12:50 tags: JavaSE categories: - Java - JavaSE 一.Java虚拟机的内存区 ...
- Groovy 语法学习
一.配置 Groovy 环境: 下载 Groovy(Groovy 依赖 Java,所以需要 JDK 环境):http://www.groovy-lang.org/download.html 配置环境变 ...
- Generator
基本概念 Generator函数是ES6提供的一种异步编程解决办法,语法行为与传统函数完全不同. Generator函数有多种理解角度.语法上,首先可以把它理解成,Generator函数是一个状态机, ...
- 廖雪峰 JavaScript 学习笔记(函数)
JavaScript中,定义函数的方式如下: function abs(x) { if (x >= 0) { return x; } else { return -x; } } 上述abs()函 ...
- CentOS7.4用yum安装并配置MySQL5.7
1.配置YUM源 下载MySQL源安装包 wget http://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm 安装MySQ ...