Python_网络编程_socket()
什么是 Socket?
Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯。
详细资料查看菜鸟教程http://www.runoob.com/python3/python3-socket.html
案例1 - 实现连接:
1.1服务端
# -*- coding: UTF-8 -*-
# Filename : Python_网络编程_服务器端.py #引入模块
import socket,sys #创建socket对象
serversocket = socket.socket(socket.AF_INET,socket.SOCK_STREAM) #socket内的两个参数分别是:IPV4、TCP # 获取本地主机名
host = socket.gethostname()
port = 9999 #注:这里是自定义的,尽量不要用4000以内的端口 # 绑定端口
serversocket.bind((host, port)) # 设置最大连接数,超过后排队
serversocket.listen(5) print("服务器已经开启,可以连接...")
while True:
# 建立客户端连接
clientsocket,addr = serversocket.accept() print("连接地址: %s" % str(addr)) msg='欢迎访问!'+ "\r\n"
clientsocket.send(msg.encode('utf-8'))
clientsocket.close()
1.2客户端
# 导入 socket、sys 模块
import socket
import sys # 创建 socket 对象
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 获取本地主机名
host = socket.gethostname() # 设置端口好
port = 9999 # 连接服务,指定主机和端口
s.connect((host, port)) # 接收小于 1024 字节的数据
msg = s.recv(1024) s.close() print (msg.decode('utf-8'))
案例2 - 实现双向信息传递:
2.1服务器端
# -*- coding:utf8 -*- """
备注:这是服务器
"""
import socket,sys # 导入socket模块 sk = socket.socket() # 创建socket对象
sk.bind(("127.0.0.1", 8888)) # 绑定端口,“127.0.0.1”代表本机地址,8888为设置链接的端口地址
sk.listen(5) # 设置监听,最多可有5个客户端进行排队
print("等待客户连接中……")
while True: #准备循环执行以下步骤
conn, addr = sk.accept() # 阻塞状态,被动等待客户端的连接
print(conn) # conn可以理解客户端的socket对象
print(addr) # addr为客户端的端口地址
# ('127.0.0.1', 40966)
accept_data = conn.recv(1024) # conn.recv()接收客户端的内容,接收到的是bytes类型数据,通常最大是1024个字节
if accept_data: #‘如果能正常接收到客户端传来数据,就...’即:不为空
accept_data2 = accept_data.decode("utf-8") # str(data,encoding="utf8")用“utf8”进行解码
if accept_data2=='exit': #如果客户端传来的是“exit”就执行。。。
sys.exit()
else:
print("".join(("接收内容:", accept_data2, " 客户端口:", str(addr[1]))))
send_data = input("输入发送内容:") #给客户端发送内容
conn.sendall(bytes(send_data, encoding="utf8")) # 发送内容必须为bytes类型数据,bytes(data, encoding="utf8")用“utf8”格式进行编码
conn.close()
sys.close()
2.2客户端:
# -*- coding:utf8 -*-
#修改接口,和server4链接
#修改为多次运行 while True
'''
备注:这是客户端;当在客户端输入“exit”时服务端断开
''' import socket
while True:
obj = socket.socket() #注 括号内默认“socket.AF_INET,socket.SOCK_STREAM”,是IPV4 和 TCP协议
obj.connect(("127.0.0.1",8888)) #声明链接方式,ip 和 端口
send_data = input("输入发送内容:") #输入传输内容(字符串格式)
obj.sendall(bytes(send_data, encoding="utf8")) #转换为字节码格式并发送给服务器
ret = str(obj.recv(1024),encoding="utf-8") #接收到(服务器传来的)字节码格式的内容,转为字符串格式
print(ret) #输出
Python_网络编程_socket()的更多相关文章
- 8.9.网络编程_Socket 远程调用机制
1.网络编程 1.1.网络编程概述: 通过通信线路(有线或无线)可以把不同地理位置且相互独立的计算机连同其外部设备连接起来,组成计算机网络.在操作系统.网络管理软件及网络 通信协议的管理和协调下,可以 ...
- 【vc】14_网络编程_socket编程
1.计算机网络基本知识 最简单的网络程序如图: 提示:IP地址就相当于一个公司的总机号码,端口号就相当于分机号码.在打电话时,拨通总机后,还需要转到分机上. (1)协议 ·为进行网络中的数据交换(通信 ...
- python_网络编程
网络ISO(国际标准化组织)--->网络体系结构标准(OSI模型)OSI: 网络信息传输比较复杂需要很多功能协同-->将功能分开,降低耦合度,让每个模块完成一定的功能-->将这些模块 ...
- android网络编程_socket(一)
转载http://www.eoeandroid.com/thread-97477-1-1.html 小知识点:UDP协议和TCP协议的不同.UDP是把数据都打成数据包,数据包上自带通信的地址,但是数据 ...
- Python_网络编程udp-飞秋自动攻击
# 模拟一个接收数据import socketimport time def auto_hack(udp_socket, recv_msg, revc_ip, revc_port=2425): # 发 ...
- python_网络编程_基础
基本的架构有C/S架构 和B/S架构 B/S架构优于C/S架构? 因为统一入口 , 都是从浏览器开始访问 两台电脑实现通信, 需要网卡, 网卡上有全球唯一的mac地址 ARP协议 #通过ip地址就能找 ...
- python_网络编程socketserver模块实现多用户通信
服务端: import socketserver class MyServer(socketserver.BaseRequestHandler): def handle(self): #在这个函数里面 ...
- python_网络编程hmac模块验证客户端的合法性
hmac模块: 比较两个函数的密钥是否一致: import hmac import os msg = os.urandom(32) #生成32位随机字节码 def wdc(): key = b'wdc ...
- python_网络编程struct模块解决黏包问题
为什么会出现黏包现象: 首先只有在TCP协议中才会出现黏包现象,是因为TCP协议是面向流的协议,在发送的数据传输的过程中还有缓存机制来避免数据丢失,因此,在连续发送小数据的时候,以及接收大小不符的时候 ...
随机推荐
- Linux关联文件扩展名和打开程序
手动为Linux关联文件扩展名与打开程序. 当Linux不认识某种扩展名的时候,需要为此扩展名创建一个MIME类型.Linux是依据MIME类型而不是扩展名来决定打开程序的. 再将此种MIME类型与某 ...
- centos8平台用ffprobe获取视频文件信息(ffmpeg4.2.2)
一,ffprobe的作用 ffprobe是强大的视频分析工具, 用于从多媒体流中获取相关信息或查看文件格式信息, 并以可读的方式打印 说明:刘宏缔的架构森林是一个专注架构的博客,地址:https:// ...
- 【Azure Redis 缓存 Azure Cache For Redis】如何设置让Azure Redis中的RDB文件暂留更久(如7天)
问题描述 Azure Redis和所有的Redis服务一样,可以让你保留存储在Redis中的数据.以防万一在Redis服务器出现故障的时候能尽可能小的减少数据的损失.在Azure Redis服务中,默 ...
- 操作系统OS基础
OS: Operating System 操作系统,通用目的的软件程序 主要功能:硬件驱动 进程管理 内存管理 网络管理 安全管理 文件管理OS分类:服务器OS:CentOS,Ubuntu,Windo ...
- 使用经纬度得到位置Geocorder
先得到经纬度再用geocorder 显示位置,需要手机打开位置权限,使用GPS的话把注释去掉,GPS在室内很容易收不到信号,得到位置为空 public class MainActivity exten ...
- Redis学习笔记(八)——持久化
一.介绍 Redis的所有的数据都存在内存中,然后不定期的通过异步方式保存到磁盘上(这称为"半持久化模式"):也可以把每一次数据变化都写入到一个append only file(a ...
- GoSDK的安装及环境变量配置 入门详解 - 精简归纳
GoSDK的安装及环境变量配置 入门详解 - 精简归纳 JERRY_Z. ~ 2020 / 10 / 29 转载请注明出处!️ 目录 GoSDK的安装及环境变量配置 入门详解 - 精简归纳 一.进入G ...
- Java学习的第三十天
1.遇到打印文件使用打印流PrintStream 使用PrintStream写入数据 2.没有问题 3.明天学习用RandomAccessFile随机访问文件
- Win10 Terminal + WSL 2 安装配置指南,精致开发体验
自从 Windows Terminal 正式发布后就再没有用过 Windows 系统自带的终端了.主要是 Terminal 简洁且灵活,更重要的是支持特殊字体,通过一些简单的配置可以使得终端看起来更舒 ...
- Charles使用part1——基本功能介绍
一. 安装与破解: 官网地址:https://www.charlesproxy.com/download/ 破解自行解决. 二. 启动与配置: 启动 Charles 后,第一次 Charles 会请求 ...