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套接字相关推荐

  1. day7 面向对象进阶、socket套接字

    文章目录 1. 静态方法.类方法 1.1 静态方法 1.2 类方法 2. 属性方法 3. 类的一些成员方法 4. 反射 5. 异常处理 6. socket 套接字 1. 静态方法.类方法 1.1 静态 ...

  2. 三、初识Socket套接字结构体

    一.初识Socket套接字结构体 1.通用套接字结构体类型 struct sockaddr{sa_family_t sa_family; //协议簇char sa_data[14]; //协议簇数据} ...

  3. 基于UDP协议的socket套接字编程 基于socketserver实现并发的socket编程

    基于UDP协议 的socket套接字编程 1.UDP套接字简单示例 1.1服务端 import socketserver = socket.socket(socket.AF_INET,socket.S ...

  4. Python 技术篇-socket套接字实现两个窗口间消息传递实例演示,TCP实现

    上一篇:Python 技术篇-socket 套接字实现服务器客户端消息传递,UDP 实现 本篇介绍用 TCP 来实现. socket 实现客户端服务器的消息传递有 TCP 和 UDP 两种方式. TC ...

  5. Python 技术篇-socket套接字实现服务器客户端消息传递实例演示,UDP实现

    上一篇:Python 技术篇-socket 套接字实现两个窗口间消息传递,TCP 实现 本篇介绍用 UDP 来实现. socket 套接字实现服务器客户端消息传递有 UDP 和 TCP 两种形式.他们 ...

  6. java实现套接字网络编程_Java网络编程(一)Socket套接字

    一.基础知识 1.TCP:传输控制协议. 2.UDP:用户数据报协议. 二.IP地址封装 1.InetAddress类的常用方法 getLocalHost() 返回本地主机的InetAddress对象 ...

  7. C语言socket bind()函数(为socket套接字关联了一个相应的地址与端口号)

    #include <sys/socket.h>int bind(int socket, const struct sockaddr *address, socklen_t address_ ...

  8. Python开发基础----异常处理、socket套接字基础1

    异常处理 错误 程序里的错误一般分为两种: 1.语法错误,这种错误,根本过不了python解释器的语法检测,必须在程序执行前就改正 2.逻辑错误,人为造成的错误,如数据类型错误.调用方法错误等,这些解 ...

  9. socket 套接字的基本概念

    什么是套接字: socket套接字:一套网络通信的接口 (API), 一套函数, 本质是伪文件. 在网络环境中唯一的标识一个进程需要 IP 和端口,这个进程就是 socket,因此 socket 需要 ...

最新文章

  1. 分享jQuery对象和Javascript对象之间的转换代码
  2. 【pyhon】怨灵侍全本漫画批量下载爬虫1.00
  3. javaSE基础之记事本编程
  4. 对比Excel,学习Python报表自动化实战
  5. vue2 父子组件传参 回调函数使用
  6. SQL 2005 with(nolock)详解
  7. 容器编排技术 -- Kubernetes 为 Namespace 设置最小和最大内存限制
  8. grafa导出数据图标_第5章 数据与可视化 - Grafana与数据可视化 - 《Prometheus操作指南》 - 书栈网 · BookStack...
  9. 天刀服务器未响应,《天涯明月刀手游》画面卡顿解决办法
  10. HTML,CSS中的复合写法总结
  11. python_大智慧SAR指标编写
  12. phpcms extention.func.php数据的使用
  13. 学计算机跨考航天航空,往届生跨考计算机经验
  14. 程序员的这些前五大无奈,你占了多少?
  15. 程序员实现 财务自由的 40 个案例
  16. 解析:为什么设计师选择mac电脑居多?
  17. 埃默里大学(Emory University)计算机系招收NLP方向博士生啦~
  18. React——基础(笔记)
  19. 桌面程序聊天窗口的自动输入内容及自动发送
  20. 视频剪辑怎么自学?其实剪辑很简单

热门文章

  1. Oracle CheckPoint进程
  2. JSP第十四次课:JSP项目开发高级操作2---在线编辑器应用及前台首页显示商品
  3. 分析:合格的UTM设备评判与选择
  4. 虚拟机在Hyper-V和Citrix Xenserver上的区别
  5. 容器:我的java笔记(2)
  6. nginx绑定freenom.com域名
  7. Difference of Deep linear/ no linear neural networks
  8. datatable删除一行数据
  9. Error: no such column
  10. java安装cab破损,WCELOAD无法安装压缩的CAB文件