python网络编程:socket套接字
本文目录:
一、socket
socket是什么?
学习网络编程 其实就是在学socket 翻译过来称为套接字,是对底层的 TCP IP UDP 等网络协议进行封装,使得上层的应用程序开发者,不用直接接触这对复杂,丑陋的协议,在程序员的言论,他就是一个封装好的模块!
要完成网络通讯,只需要使用系统提供的socket模块就行,TCP和UDP是传输层最常见的协议
TCP和UDP的优缺点
主要控制传输数据的方式
TCP的传输方式
优点:通过三次握手来与服务器建立连接
可以保证数据的完整性
a机器给b机器发送数据包 要求b机器必须立即返回一个确认包
a机器会等待一段时间,如果超时还没有收到确认,则重发数据
缺点:传输效率低
使用场景: 文字聊天,支付宝转账等,
UDP
传输方式:不需要建立连接,直接发送
缺点: 不能保证数据的完整性
优点:传输效率比TCP高
使用场景:视频通话,语音通话,UDP
"""
python中的socket 在使用socket的时候用户需要关心的是 ip地址,port端口, 传输协议TCP/UDP,你要发送的数据data 在写网络编程的时候,必然是有两台代码,对应着客户端和服务器 使用socket来完成TCP通讯
应该先完成服务器的代码编写 """
二、TCP服务器
import socket
# 1.创建一个代表服务器的socket对象
s = socket.socket() # 2.绑定端口号和IP地址
# 127.0.0.1 表示当前这个电脑的ip
address = ("127.0.0.1",8080)
s.bind(address) print("服务器已启动!") # 3.开始监听这个端口
# 5表示 可以有5个处于半连接状态的连接 指的不是最大连接数
s.listen(5)
print("test") # 4.接受连接请求
# 该函数是阻塞的 会卡主程序的执行,必须等到有一个客户端进来才会继续执行
# 返回元组 第一个是代表客户端的socket对象 第二客户端的地址信息
client,c_address = s.accept()
print("有一个连接已建立!")
print(c_address) # 给客户端发送数据 # 5.读写数据
# 接受数据
res = client.recv(1024)
print(res) # 6.关闭连接
# s.close()
三、TCP客户端
import socket # 1.创建客户端的socket对象
c = socket.socket() # 2.指定服务器的ip和port
server_address = ("127.0.0.1",8080) # 3.建立连接
c.connect(server_address) # 4.读写数据
# 发送数据到服务器
c.send("hello 我是客户端!".encode("utf-8")) # 5.关闭连接
c.close()
四、UDP服务器
import socket
# 1.创建socket对象
s = socket.socket(type=socket.SOCK_DGRAM) # 2.绑定端口和ip
s.bind(("127.0.0.1",10000)) while True:
# 3.接受数据
res = s.recv(1024)
print(res) while True:
msg = input(">>>:")
# 需要获取对方的ip和端口
#s.sendto(msg.encode("utf-8"), ("127.0.0.1", 10000)) # 关闭资源
s.close()
五、UDP客户端
import socket
# 1.创建socket对象
s = socket.socket(type=socket.SOCK_DGRAM) # 2.绑定端口和ip
s.bind(("127.0.0.1",10000)) while True:
# 3.接受数据
res = s.recv(1024)
print(res) while True:
msg = input(">>>:")
# 需要获取对方的ip和端口
#s.sendto(msg.encode("utf-8"), ("127.0.0.1", 10000)) # 关闭资源
s.close()
六、聊天服务器
import socket
# 1.创建socket对象
s = socket.socket(type=socket.SOCK_DGRAM) # 2.绑定端口和ip
s.bind(("127.0.0.1",10000)) while True:
# 3.接受数据
res = s.recv(1024)
print(res) while True:
msg = input(">>>:")
# 需要获取对方的ip和端口
#s.sendto(msg.encode("utf-8"), ("127.0.0.1", 10000)) # 关闭资源
s.close()
七、聊天客户端
import socket
client = socket.socket()
client.connect(("127.0.0.1",65535))
while True:
# 发送
client.send(input(">>>:").encode("utf-8"))
# 接收
data = client.recv(1024).decode("utf-8")
print(data)
if len(data) == 0:
client.close()
break
python网络编程:socket套接字的更多相关文章
- python网络编程-socket套接字通信循环-粘包问题-struct模块-02
前置知识 不同计算机程序之间数据的传输 应用程序中的数据都是从程序所在计算机内存中读取的. 内存中的数据是从硬盘读取或者网络传输过来的 不同计算机程序数据传输需要经过七层协议物理连接介质才能到达目标程 ...
- Python网络编程——处理套接字错误
在网络应用中,经常会遇到这种情况:一方尝试连接,但另一方由于网络媒介失效或者其他原因无法响应. Python的Socket库提供了一个方法,能通过socket.error异常优雅地处理套接字错误. 1 ...
- 19 网络编程--Socket 套接字方法
1.Socket(也称套接字)介绍 socket这个东东干的事情,就是帮你把tcp/ip协议层的各种数据封装啦.数据发送.接收等通过代码已经给你封装好了 ,你只需要调用几行代码,就可以给别的机器发消息 ...
- 网络编程--Socket(套接字)
网络编程 网络编程的目的就是指直接或间接地通过网络协议与其他计算机进行通讯.网络编程中 有两个主要的问题,一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后 如何可靠高效的进行数据传输.在 ...
- 8.7 day28 网络编程 socket套接字 半连接池 通信循环 粘包问题 struct模块
前置知识:不同计算机程序之间的数据传输 应用程序中的数据都是从程序所在计算机内存中读取的. 内存中的数据是从硬盘读取或者网络传输过来的 不同计算机程序数据传输需要经过七层协议物理连接介质才能到达目标程 ...
- 19、网络编程 (Socket套接字编程)
网络模型 *A:网络模型 TCP/IP协议中的四层分别是应用层.传输层.网络层和链路层,每层分别负责不同的通信功能,接下来针对这四层进行详细地讲解. 链路层:链路层是用于定义物理传输通道,通常是对某些 ...
- Python网络编程——修改套接字发送和接收的缓冲区大小
很多情况下,默认的套接字缓冲区大小可能不够用.此时,可以将默认的套接字缓冲区大小改成一个更合适的值. 1. 代码 # ! /usr/bin/env python # -*- coding: utf-8 ...
- UNIX网络编程——原始套接字(dos攻击)
原始套接字(SOCK_RAW).应用原始套接字,我们可以编写出由TCP和UDP套接字不能够实现的功能. 注意原始套接字只能够由有 root权限的人创建. 可以参考前面的博客<<UNIX网络 ...
- UNIX网络编程——原始套接字的魔力【续】
如何从链路层直接发送数据帧 上一篇里面提到的是从链路层"收发"数据,该篇是从链路层发送数据帧. 上一节我们主要研究了如何从链路层直接接收数据帧,可以通过bind函数来将原始套接字绑 ...
- TCP/IP网络编程之套接字类型与协议设置
套接字与协议 如果相隔很远的两人要进行通话,必须先决定对话方式.如果一方使用电话,另一方也必须使用电话,而不是书信.可以说,电话就是两人对话的协议.协议是对话中使用的通信规则,扩展到计算机领域可整理为 ...
随机推荐
- Linux命令集锦:ssh命令
保持连接配置服务端SSH总是被强行中断,导致效率低下,可以在服务端配置,让 server 每隔30秒向 client 发送一个 keep-alive 包来保持连接: vim /etc/ssh/sshd ...
- Servlet(1):基础概念/最简实例
Servlet 生命周期(1) init()方法初始化Servlet对象 它在第一次创建Servlet时被调用,在后续每次不同用户请求时不再调用.(2) service()方法来处理客户端的请求 ...
- SpringBoot: 4.SpringBoot整合listener(转)
整合方式一:通过注解扫描完成 Listener 组件的注册 1.编写listener package com.bjsxt.listener; import javax.servlet.ServletC ...
- 英特尔携手中国游戏开发者登陆 Unite Shanghai 2019 推动游戏产业创新
2019 年 5 月 10 日-12 日,Unite Shanghai 2019 在上海召开.除了展示 Unity 的最新技术成就,以及出众的 Made with Unity 游戏与行业应用之外,大会 ...
- 【并行计算-CUDA开发】GPU---并行计算利器
1 GPU是什么 如图1所示,这台PC机与普通PC机不同的是这里插了7张显卡,左下角是显卡,在中间的就是GPU芯片.显卡的处理器称为图形处理器(GPU),它是显卡的"心脏",与CP ...
- 阿里EMR部署
选自定义购买: 选择master配置: 选择core配置: 下一步,选高级里在jdbc后填RDS的url, 用户名,密码: jdbc:mysql://rm-d7o7x76l11u0434zn.mysq ...
- 插入排序的Python代码实现
是打扑克的时候了 那种按大小排序的扑克游戏 def insert_sort(arr): for i in range(1,len(arr)): for j in range(i,0,-1): #与左边 ...
- 14.Sqoop把数据从HDFS导出到mysql
创建数据文件 ,gopal,manager,,TP ,manisha,preader,,TP ,kalil,php dev,,AC ,prasanth,php dev,,AC ,kranthi,adm ...
- 重载(overload)和重写(override)的区别
方法的重载和重写都是实现多态的方式,区别在于前者实现的是编译时的多态性,而后者实现的是运行时的多态性. 重载发生在一个类中,同名的方法如果有不同的参数列表(参数类型不同.参数个数不同或者二者都不同)则 ...
- PHP实现字母数字混合验证码
一款简单的PHP实现字母数字混合验证码,支持自定义验证码.验证码图片.宽度.高度.个数.背景图片等 验证码调用地址:Application\Home\Controller\CodeController ...