Python socket记录
网络编程
1.基本概念
1.什么是客户端/服务器架构?
服务器就是一系列硬件或软件,为一个或多个客户端(服务的用户)提供所需的“服务”。它存在唯一目的就是等待客户端的请求,
并响应它们(提供服务),然后等待更多请求。
一个提供服务,一个请求服务得到相应的过程。
2.套接字:通信端点
套接字,就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。
一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制。
从所处的地位来讲,套接字上联应用进程,下联网络协议栈,是应用程序通过网络协议进行通
信的接口,是应用程序与网络协议栈进行交互的接口。
python只支持AF_UNIX、AF_NETLINK、AF_TIPC 和 AF_INET ,重点使用基于网络的AF_INET
套接字地址:主机-端口对(有效端口范围为0~65535)
3.套接字类型
流式套接字(SOCK_STREAM):用于提供面向连接、可靠的数据传输服务。
数据报套接字(SOCK_DGRAM):提供了一种无连接的服务。该服务并不能保证数据传输的可靠性,数据有可能在传输过程中丢失或出现数据重复,且无法保证顺序地接收到数据。
Python中的网络编程
首先介绍一下socket()模块函数
要创建套接字,必须使用socket.socket()函数,它一般的语法如下
socket(socket_family, socket_type, protocol=0)
socket_family如下(部分):
- socket.AF_UNIX:用于同一台机器上的进程通信(既本机通信)
- socket.AF_INET:用于服务器与服务器之间的网络通信
- socket.AF_INET6:基于IPV6方式的服务器与服务器之间的网络通信
socket_type如下:
- socket.SOCK_STREAM:基于TCP的流式socket通信
- socket.SOCK_DGRAM:基于UDP的数据报式socket通信
套接字的内置方法

创建服务和客户端
- 创建TCP服务
ss = socket() # 创建服务器套接字
ss.bind() # 套接字与地址绑定
ss.listen() # 监听
cs = ss.accept() # 接收客户端连接
cs.recv()/cs.send() # 对话(接收/发送)
cs.close() # 关闭客户端套接字(可选)
ss.close() # 关闭服务器套接字(可选)
- 创建TCP客户端
cs = socket() # 创建客户端套接字
cs.connect() # 尝试连接服务器
cs.send()/cs.recv() # 对话(发送 / 接收)
cs.close() # 关闭客户端套接字
代码示例
# TCP服务
import socket
import threading
IP = ""
PORT = 80
def main():
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind((IP, PORT))
server.listen(5)
print(f"[*] Listening on {IP}:{PORT}")
while True:
client, address = server.accept()
print(f"[*] Accepted connection from {address[0]}:{address[1]}")
client_header = threading.Thread(target=handle_client, args=(client, ), daemon=True)
client_header.start()
def handle_client(client_server):
with client_server as sock:
request = sock.recv(1024)
print(f'[*] Received: {request.decode("utf-8")}')
send = "服务器端"
sock.send(send.encode("utf-8"))
if __name__ == '__main__':
main()
# TCP 客户端
import socket
target_host = "127.0.0.1"
target_port = 80
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
client.connect((target_host, target_port))
send = "客户端"
client.send(send.encode("utf-8"))
response = client.recv(4096)
print(response.decode())
except:
print("连接失败!")
finally:
client.close()
可以根据自己的想法进行扩展,例如持续连接进行交互,根据自己的要求进行断开连接,此时可以在客户端加个while True:
和一个判断语句,等等
Python socket记录的更多相关文章
- Python Socket 编程——聊天室示例程序
上一篇 我们学习了简单的 Python TCP Socket 编程,通过分别写服务端和客户端的代码了解基本的 Python Socket 编程模型.本文再通过一个例子来加强一下对 Socket 编程的 ...
- python/socket编程之粘包
python/socket编程之粘包 粘包 只有TCP有粘包现象,UDP永远不会粘包. 首先需要掌握一个socket收发消息的原理 发送端可以是1k,1k的发送数据而接受端的应用程序可以2k,2k的提 ...
- Python Socket 编程——聊天室演示样例程序
上一篇 我们学习了简单的 Python TCP Socket 编程,通过分别写服务端和client的代码了解主要的 Python Socket 编程模型.本文再通过一个样例来加强一下对 Socket ...
- Python Socket 基础多用户编程
简介 写下这篇小记的原因是想记录一下自己学习Python Socket编程的心路历程.之前在中专的时间学过一些基础的Socket编程,知道了一些比较基础的内容比如基础的socket.bind()类 ...
- Python Socket 网络编程
Socket 是进程间通信的一种方式,它与其他进程间通信的一个主要不同是:它能实现不同主机间的进程间通信,我们网络上各种各样的服务大多都是基于 Socket 来完成通信的,例如我们每天浏览网页.QQ ...
- Python学习记录day6
title: Python学习记录day6 tags: python author: Chinge Yang date: 2016-12-03 --- Python学习记录day6 @(学习)[pyt ...
- Python学习记录day5
title: Python学习记录day5 tags: python author: Chinge Yang date: 2016-11-26 --- 1.多层装饰器 多层装饰器的原理是,装饰器装饰函 ...
- python socket发送魔法包网络唤醒开机.py
python socket发送魔法包网络唤醒开机.py 现在的电脑应该都普遍支持有线网络的WOL了,支持无线网络唤醒的电脑,可能比较少. """ python socke ...
- Python socket编程之二:【struct.pack】&【struct.unpack】
import struct """通过 socket 的 send 和 recv 只能传输 str 格式的数据""" "" ...
- Python Socket,How to Create Socket Server? - 网络编程实例
文章出自:Python socket – network programming tutorial by Silver Moon 原创译文,如有版权问题请联系删除. Network programin ...
随机推荐
- Sound Joy连接非华为手机热点
很简单,准备两个手机.常用手机和备用手机1.常用手机开启热点2.备用手机连接常用手机的热点,并且已经安装华为智慧生活app3.备用手机连接到常用手机热点后,再打开智慧生活app连接常用手机热点即可
- Mybatis Plus根据某字段特定值排序
需求 背景:一个审核流程.审核人等级分为市级和省级,管理员升级字段adminlevel,字段含义:1省级,2市级.审核字段audit为int字段,字段含义:1待市级审核,2待省级审核,3通过审核. 需 ...
- GKCTF X DASCTF应急挑战杯-Maple_root-Writeup
GKCTF X DASCTF应急挑战杯-Maple_root-Writeup 参赛队员: b4tteRy, x0r, f1oat 最终成绩:2285 最终排名:27 总结 经过最近几次类线下的演练,感 ...
- 记某gov门户网站渗透测试(已修复)
前言: 免责声明:涉及到的所有技术仅用来学习交流,严禁用于非法用途,未经授权请勿非法渗透.否则产生的一切后果自行承担! 该渗透测试项目为已授权项目,本文已对敏感部分做了相关处理. 正文: SQL注入( ...
- 方差分析3——正交表与正交实验设计(R语言)
正交试验设计(orthogonal design简称正交设计(orthoplan),是利用正交表(orthogonal table)科学地安排与分析多因素试验的方法,是最常用的试验设计之一.正交表是一 ...
- kubernetes(k8s)中部署dashboard可视化面板
Web 界面 (Dashboard) Dashboard 是基于网页的 Kubernetes 用户界面.你可以使用 Dashboard 将容器应用部署到 Kubernetes 集群中,也可以对容器应用 ...
- [灾备]独立磁盘阵列(RAID)技术
本文是对3个月前临时出差前往客户现场,安装交付我司大数据产品时使用的一项硬件级的灾备技术的简要复盘. 1 独立磁盘阵列--RAID:概述 1.1 定义 RAID := Redundant Arrays ...
- 五月九号java基础知识点
1.哈希集合元素不按顺序排序,若要排序使用LinkedHashSet类2.树集合类不仅实现Set接口,还实现java.lang.SortedSet接口来实现排序操作3.TreeSet<Strin ...
- Redis为什么能抗住10万并发?揭秘性能优越的背后原因
1. Redis简介 Redis是一个开源的,基于内存的,高性能的键值型数据库.它支持多种数据结构,包含五种基本类型 String(字符串).Hash(哈希).List(列表).Set(集合).Zse ...
- jquery全选,全不选,反选,获取选择框的值
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...