Python socket编程之二:【struct.pack】&【struct.unpack】
import struct
"""通过 socket 的 send 和 recv 只能传输 str 格式的数据"""
"""struct.pack"""
a1 = 10
a2 = 100
str = struct.pack("ii", a1, a2)
print('str = ', str)
"""struct.unpack"""
a1, a2 = struct.unpack("ii", str)
print('a1 = ', a1)
print('a2 = ', a2)

args = ("H", "ello world ", 5)
struct.pack("c12si", *args)
# 等价于
struct.pack("c12si", "H", "ello world ", 5)
一个完整的实例
- 1.f1.py
# -*- coding: utf-8 -*-
"""f1.py"""
"""Python socket 编程实例"""
import socket
import struct
########################################################################
class sckt:
"""变量名缩写法,sckt 代表 socket"""
#----------------------------------------------------------------------
def __init__(self, host = '192.168.1.3', port = 12345):
"""地址与端口初始化"""
self.host = host
self.port = port
#----------------------------------------------------------------------
def run_server(self):
"""服务器"""
sckt = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
"""声明 TCP/IP 报文"""
sckt.bind((self.host, self.port))
"""绑定地址与端口"""
sckt.listen(5)
"""启动监听"""
connection, address = sckt.accept()
"""开启接收"""
if connection.recv(1024) == b'Link':
"""对接信号,b'' 代表二进制形式的字符串,socket 的要求"""
print('Linking server successed!')
ld = [1, 2, 3]
"""Listdata,数据格式 3i = [int,int,int]"""
sd = struct.pack('3i', ld[0], ld[1], ld[2])
"""根据 ld 数据格式 pack 为 socket 传输格式 3i"""
connection.send(sd)
"""向客户端发送数据"""
else:
connection.send(b'Cut off the connection!')
connection.close()
"""关闭链接"""
#----------------------------------------------------------------------
def run_client(self, message = b'Link'):
"""客户端"""
sckt = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
"""声明 TCP/IP 报文"""
sckt.connect((self.host, self.port))
"""链接服务器"""
sckt.send(message)
"""向服务器发送数据"""
sd = sckt.recv(1024)
"""接收服务器数据"""
ld = struct.unpack('3i', sd)
"""解包"""
print(ld)
sckt.close()
"""关闭连接"""
- 2.f2.py
# -*- coding: utf-8 -*-
"""f2.py"""
"""载入模块"""
import sys
sys.path.append('D:/360data/重要数据/桌面')
import f1
"""地址初始化"""
F1 = f1.sckt()
"""运行服务器"""
F1.run_server()
"""运行客户端"""
F1.run_client()

Python socket编程之二:【struct.pack】&【struct.unpack】的更多相关文章
- python socket 编程之二:tcp三次握手
建立起一个TCP连接需要经过“三次握手”:第一次握手:客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认:第二次握手:服务器收到syn包,必须确认客户的SYN(ack ...
- socket编程之二:两种链接类型tcp和udp
前面一篇文章说到了一些计算机网络的基础知识.引入了socket.从这节開始,就进入正题了. 一 概述 TCP:Transimission Control Protocol传输控制协议. UPD:Use ...
- Python socket编程之IO模型介绍(多路复用*)
1.I/O基础知识 1.1 什么是文件描述符? 在网络中,一个socket对象就是1个文件描述符,在文件中,1个文件句柄(即file对象)就是1个文件描述符.其实可以理解为就是一个“指针”或“句柄”, ...
- python并发编程之multiprocessing进程(二)
python的multiprocessing模块是用来创建多进程的,下面对multiprocessing总结一下使用记录. 系列文章 python并发编程之threading线程(一) python并 ...
- iPhone socket 编程之BSD Socket篇
iPhone socket 编程之BSD Socket篇 收藏在进行iPhone网络通讯程序的开发中,不可避免的要利用Socket套接字.iPhone提供了Socket网络编程的接口CFSocket, ...
- 老雷socket编程之websocket实现
老雷socket编程之websocket实现 我们主要实现私聊和群聊两个功能,要在web端实现想微信QQ那样的即时通讯的功能,我们需要了解一下websocket.websocket是一种可以双向通讯的 ...
- python并发编程之Queue线程、进程、协程通信(五)
单线程.多线程之间.进程之间.协程之间很多时候需要协同完成工作,这个时候它们需要进行通讯.或者说为了解耦,普遍采用Queue,生产消费模式. 系列文章 python并发编程之threading线程(一 ...
- python并发编程之gevent协程(四)
协程的含义就不再提,在py2和py3的早期版本中,python协程的主流实现方法是使用gevent模块.由于协程对于操作系统是无感知的,所以其切换需要程序员自己去完成. 系列文章 python并发编程 ...
- python并发编程之asyncio协程(三)
协程实现了在单线程下的并发,每个协程共享线程的几乎所有的资源,除了协程自己私有的上下文栈:协程的切换属于程序级别的切换,对于操作系统来说是无感知的,因此切换速度更快.开销更小.效率更高,在有多IO操作 ...
随机推荐
- Elasticsearch 相关名词理解
Cluster包含多个node,Indices不应该理解成动词索引,Indices可理解成关系数据库中的databases,Indices可包含多个Index,Index对应关系数据库中的databa ...
- MySQL主从同步几个文件
MySQL主从同步: M锁表 M导出S导入 M解锁 M建同步帐号 S获取点位:产生master.info S开启同步 3306: mysql-bin.0000x mysql-bin.index ...
- C++ Set & MultiSet
转自http://www.cppblog.com/wanghaiguang/archive/2012/06/05/177627.html STL Set介绍集合(Set)是一种包含已排序对象的关联容器 ...
- Redis做消息队列文章两篇
介绍:http://www.cnblogs.com/lhfcws/p/3732535.html 具体做法:http://shift-alt-ctrl.iteye.com/blog/1867454 另外 ...
- 在WebApi中实现Cors访问
Cors是个比较热的技术,这在蒋金楠的博客里也有体现,Cors简单来说就是“跨域资源访问”的意思,这种访问我们指的是Ajax实现的异步访问,形象点说就是,一个A网站公开一些接口方法,对于B网站和C网站 ...
- poj2154-color-polyan次二面体+欧拉函数优化
N<=1e9,O(nlogn)的做法会超时.从枚举置换转变为枚举轮换长度,然后可以利用欧拉函数,把复杂度变为O(√n * logn) /*---------------------------- ...
- 怎样开发单页面app
groot.view("myview", function (vm, ve) { ve.loada = function () { require("./app/page ...
- spring cloud教程之使用spring boot创建一个应用
<7天学会spring cloud>第一天,熟悉spring boot,并使用spring boot创建一个应用. Spring Boot是Spring团队推出的新框架,它所使用的核心技术 ...
- 学习之路三十五:Android和WCF通信 - 大数据压缩后传输
最近一直在优化项目的性能,就在前几天找到了一些资料,终于有方案了,那就是压缩数据. 一丶前端和后端的压缩和解压缩流程 二丶优点和缺点 优点:①字符串的压缩率能够达到70%-80%左右 ②字符串数量更少 ...
- OWIN-WebAPI-Windows Service
tks: https://github.com/danesparza/OWIN-WebAPI-Service add 2015 0717:http://kb.cnblogs.com/page/5092 ...