博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
socket模块的使用
阅读量:5236 次
发布时间:2019-06-14

本文共 1926 字,大约阅读时间需要 6 分钟。

socket模块

学习网络编程,其实就是学习socket模块。

socket是什么?

翻译过来就是套接字,是对底层的TCP IP UDP等网络协议进行封装

使得上层的应用程序开发者,不用直接接触这些复杂的,艰涩的协议。

对于程序而言,他就是封装好的模块。要完成网络通信,只需要系统提供的socket模块就行。

TCP与UDP协议

TCP与UDP协议是传输层最常见的协议。

主要控制传输数据的方式。

TCP的传输方式:

优点:通过三次握手来与服务器建立连接      可以保证数据的完整性         a机器给b机器发送数据包  要求b机器必须立即返回一个确认包         a机器会等待一段时间,如果超时还没有收到确认,则重发数据 缺点:传输效率低 使用场景: 文字聊天,支付宝转账等
UDP     传输方式:不需要建立连接,直接发送     缺点: 不能保证数据的完整性     优点:传输效率比TCP高     使用场景:视频通话,语音通话,UDP

使用socket搭建最简单服务器 TCP服务器代码
import socketserver = socket.socket()#创建一个套字节对象ip_port= ("127.0.0.1",12323)server.bind(ip_port)#绑定服务器地址和端口号print(1)#不产生阻塞server.listen(5)#不阻塞#服务端开始阻塞,等待监听客户端的信息#5 代表着最大等待的连接数量print(2)client,client_adress = server.accept()#阻塞,等待客户端发送的数据#client这个对象是与客户端程序的连接对象,用来接收和发送信息。print(3)msg = client.recv(1024)#阻塞#接收客户端发送的数据(必须是二进制信息)print(msg.decode("utf-8"))client.send("收到数据".encode("utf-8"))#向客户端发送数据client.close()#关闭客户端和服务端的关系# server.close()#一般不关闭服务端对象
客户端
import socketclient =socket.socket()#客户端套接字对象client.connect(("127.0.0.1",12323))#请求与服务端产生连接与accpet()发生交互,超时就会抛出异常client.send("客户端信息".encode("utf-8"))#与服务器发送数据,与recv()发生交互msg = client.recv(1024)#接收的信息print(msg.decode("utf-8"))client.close()#关闭连接

 

 


 

UDP 

import socketudp_server = socket.socket(type=socket.SOCK_DGRAM)#形成一个socket对象,UDP形式的服务器udp_server.bind(("127.0.0.1",11011))#生成使用本机地址和端口号#udp 不需要监听,随缘接收  listen(TCP 专属)#不需要accept 生成连接对象,不需要产生连接,任意发送到服务器的数据直接接受msg = udp_server.recv(1024)#阻塞,直到接收消息后才会执行print(msg)msg1,address=udp_server.recvfrom(1024)#使用recvfrom,可得到的(信息,(地址端口))#信息,和发送端的ip 端口号print(msg1.decode("utf-8"))print(address)udp_server.close()

 

客户端

import socketudp_client = socket.socket(type=socket.SOCK_DGRAM)#指定创建的套字节对象使用UDP协议msg = input("消息1:》》").encode("utf-8")udp_client.sendto(msg,("127.0.0.1",11011))#udp发送,没有建立与服务端的连接,只能指定ip和端口发送msg1 = input("消息2:》》").encode("utf-8")udp_client.sendto(msg1,("127.0.0.1",11011))#指定需要地址端口发送,即使没有返回值也不会报错udp_client.close()

 

 

转载于:https://www.cnblogs.com/msj513/p/9898395.html

你可能感兴趣的文章
经典SQL语句大全
查看>>
Scala实战高手****第3课:在IDE下开发第一个Scala程序纯傻瓜式彻底透彻解析
查看>>
强大易用的日期和时间库 线程安全 Joda Time
查看>>
js库之dojo
查看>>
Windows 窗体消息大全(速查)
查看>>
Win32汇编PE结构剖析(6)
查看>>
一个使用JSlider的简单例子
查看>>
自定义美化UL OL发光列表
查看>>
第七模块:项目实战一 第2章 项目实战:爬虫实战
查看>>
Hibernate注解Annotation
查看>>
MySQL中的隔离级别和悲观锁及乐观锁示例
查看>>
手机端h5 ajax 上传图片支持微信内置浏览器
查看>>
【Maven】Mac 使用 zsh 后 mvn 命令就无效
查看>>
移动的彩虹
查看>>
Redmine
查看>>
HtmlEditor常用模式
查看>>
Another app is currently holding the yum lock; waiting for it to exit.. yum被锁定无法使用
查看>>
52.tableViewCell重用机制避免重复显示问题
查看>>
帧的最小长度 CSMA/CD
查看>>
xib文件加载后设置frame无效问题
查看>>