5-4日 socket套接字
1,socket定义
Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。
2,基于tcp协议的socket
tcp是基于链接的,必须先启动服务端,然后再启动客户端去链接服务端。
server端
import socket sk = socket.socket()#创建服务端套接字sk.bind(('127.0.0.1',9090))#把地址绑定到套接字 sk.listen()#监听链接conn,addr = sk.accept()#接受客户端链接 print(addr)#打印客户端地址 conn.send('你好'.encode('utf-8'))#向客户端发送信息 ret = conn.recv(1024)#接受客户端信息 print(ret.decode('utf-8'))#打印客户端信息conn.close()#关闭客户端套接字 sk.close()#关闭服务器套接字(可选)
client端
import socketsk = socket.socket()#创建客户端套接字 sk.connect(('127.0.0.1',9090))# 尝试连接服务器 ret = sk.recv(1024)#接受服务端信息 print(ret.decode('utf-8'))#打印服务端信息 sk.send('你也好'.encode('utf-8'))# 对话(发送/接收)sk.close()# 关闭客户套接字
3,基于UDP协议的socket
udp是无链接的,启动服务之后可以直接接受消息,不需要提前建立链接
server端
import socket sk = socket.socket(type=socket.SOCK_DGRAM) sk.bind(('127.0.0.1',9090)) while True:msg,client_addr = sk.recvfrom(1024)print(msg.decode('utf-8'))inp = input('>>>')sk.sendto(inp.encode('utf-8'),client_addr)sk.close()
client端
import socketsk= socket.socket(type=socket.SOCK_DGRAM) while True:inp = input('>>>')sk.sendto(inp.encode('utf-8'),('127.0.0.1',9090))msg,addr = sk.recvfrom(1024)print(msg.decode('utf-8'))sk.close()
qq轻聊版
server端
import socket lst = {'egon':'\031[1;31m','yuan':'031[1;31m'} sk = socket.socket(type=socket.SOCK_DGRAM) sk.bind(('127.0.0.1',9090)) while True:msg,client_addr = sk.recvfrom(1024)name,mesg = msg.decode('utf-8').split(':')color = lst.get(name.strip(),'')print('%s%s\033[0m'%(color,msg.decode('utf-8')))inp = input('>>>')sk.sendto(inp.encode('utf-8'),client_addr) sk.close()
client端
import socket sk = socket.socket(type=socket.SOCK_DGRAM)name = input('name') while True:inp = input('>>>')sk.sendto(('%s:%s'%(name,inp)).encode('utf-8'),('127.0.0.1',9090))msg,addr = sk.recvfrom(1024)print(msg.decode('utf-8')) sk.close()
时间服务器
server端
import time import socket sk = socket.socket(type = socket.SOCK_DGRAM) sk.bind(('127.0.0.1',9090)) while True:msg,addr = sk.recvfrom(1024)sk.sendto(time.strftime(msg.decode('utf-8')).encode('utf-8'),addr)sk.close()
client端
import time import socketsk = socket.socket(type=socket.SOCK_DGRAM) while True:sk.sendto('%Y/%m/%d %H:%M:%S'.encode('utf-8'),('127.0.0.1',9090))ret,addr = sk.recvfrom(1024)print(ret.decode('utf-8'))time.sleep(2)sk.close()
socket参数的详解
socket.socket(family=AF_INET,type=SOCK_STREAM,proto=0,fileno=None)
创建socket对象的参数说明:
family |
地址系列应为AF_INET(默认值),AF_INET6,AF_UNIX,AF_CAN或AF_RDS。 (AF_UNIX 域实际上是使用本地 socket 文件来通信) |
type |
套接字类型应为SOCK_STREAM(默认值),SOCK_DGRAM,SOCK_RAW或其他SOCK_常量之一。 SOCK_STREAM 是基于TCP的,有保障的(即能保证数据正确传送到对方)面向连接的SOCKET,多用于资料传送。 SOCK_DGRAM 是基于UDP的,无保障的面向消息的socket,多用于在网络上发广播信息。 |
proto | 协议号通常为零,可以省略,或者在地址族为AF_CAN的情况下,协议应为CAN_RAW或CAN_BCM之一。 |
fileno |
如果指定了fileno,则其他参数将被忽略,导致带有指定文件描述符的套接字返回。 与socket.fromfd()不同,fileno将返回相同的套接字,而不是重复的。 这可能有助于使用socket.close()关闭一个独立的插座。 |
转载于:https://www.cnblogs.com/yzxing/p/8992043.html
5-4日 socket套接字相关推荐
- day7 面向对象进阶、socket套接字
文章目录 1. 静态方法.类方法 1.1 静态方法 1.2 类方法 2. 属性方法 3. 类的一些成员方法 4. 反射 5. 异常处理 6. socket 套接字 1. 静态方法.类方法 1.1 静态 ...
- 三、初识Socket套接字结构体
一.初识Socket套接字结构体 1.通用套接字结构体类型 struct sockaddr{sa_family_t sa_family; //协议簇char sa_data[14]; //协议簇数据} ...
- 基于UDP协议的socket套接字编程 基于socketserver实现并发的socket编程
基于UDP协议 的socket套接字编程 1.UDP套接字简单示例 1.1服务端 import socketserver = socket.socket(socket.AF_INET,socket.S ...
- Python 技术篇-socket套接字实现两个窗口间消息传递实例演示,TCP实现
上一篇:Python 技术篇-socket 套接字实现服务器客户端消息传递,UDP 实现 本篇介绍用 TCP 来实现. socket 实现客户端服务器的消息传递有 TCP 和 UDP 两种方式. TC ...
- Python 技术篇-socket套接字实现服务器客户端消息传递实例演示,UDP实现
上一篇:Python 技术篇-socket 套接字实现两个窗口间消息传递,TCP 实现 本篇介绍用 UDP 来实现. socket 套接字实现服务器客户端消息传递有 UDP 和 TCP 两种形式.他们 ...
- java实现套接字网络编程_Java网络编程(一)Socket套接字
一.基础知识 1.TCP:传输控制协议. 2.UDP:用户数据报协议. 二.IP地址封装 1.InetAddress类的常用方法 getLocalHost() 返回本地主机的InetAddress对象 ...
- C语言socket bind()函数(为socket套接字关联了一个相应的地址与端口号)
#include <sys/socket.h>int bind(int socket, const struct sockaddr *address, socklen_t address_ ...
- Python开发基础----异常处理、socket套接字基础1
异常处理 错误 程序里的错误一般分为两种: 1.语法错误,这种错误,根本过不了python解释器的语法检测,必须在程序执行前就改正 2.逻辑错误,人为造成的错误,如数据类型错误.调用方法错误等,这些解 ...
- socket 套接字的基本概念
什么是套接字: socket套接字:一套网络通信的接口 (API), 一套函数, 本质是伪文件. 在网络环境中唯一的标识一个进程需要 IP 和端口,这个进程就是 socket,因此 socket 需要 ...
最新文章
- 分享jQuery对象和Javascript对象之间的转换代码
- 【pyhon】怨灵侍全本漫画批量下载爬虫1.00
- javaSE基础之记事本编程
- 对比Excel,学习Python报表自动化实战
- vue2 父子组件传参 回调函数使用
- SQL 2005 with(nolock)详解
- 容器编排技术 -- Kubernetes 为 Namespace 设置最小和最大内存限制
- grafa导出数据图标_第5章 数据与可视化 - Grafana与数据可视化 - 《Prometheus操作指南》 - 书栈网 · BookStack...
- 天刀服务器未响应,《天涯明月刀手游》画面卡顿解决办法
- HTML,CSS中的复合写法总结
- python_大智慧SAR指标编写
- phpcms extention.func.php数据的使用
- 学计算机跨考航天航空,往届生跨考计算机经验
- 程序员的这些前五大无奈,你占了多少?
- 程序员实现 财务自由的 40 个案例
- 解析:为什么设计师选择mac电脑居多?
- 埃默里大学(Emory University)计算机系招收NLP方向博士生啦~
- React——基础(笔记)
- 桌面程序聊天窗口的自动输入内容及自动发送
- 视频剪辑怎么自学?其实剪辑很简单