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】的更多相关文章

  1. python socket 编程之二:tcp三次握手

    建立起一个TCP连接需要经过“三次握手”:第一次握手:客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认:第二次握手:服务器收到syn包,必须确认客户的SYN(ack ...

  2. socket编程之二:两种链接类型tcp和udp

    前面一篇文章说到了一些计算机网络的基础知识.引入了socket.从这节開始,就进入正题了. 一 概述 TCP:Transimission Control Protocol传输控制协议. UPD:Use ...

  3. Python socket编程之IO模型介绍(多路复用*)

    1.I/O基础知识 1.1 什么是文件描述符? 在网络中,一个socket对象就是1个文件描述符,在文件中,1个文件句柄(即file对象)就是1个文件描述符.其实可以理解为就是一个“指针”或“句柄”, ...

  4. python并发编程之multiprocessing进程(二)

    python的multiprocessing模块是用来创建多进程的,下面对multiprocessing总结一下使用记录. 系列文章 python并发编程之threading线程(一) python并 ...

  5. iPhone socket 编程之BSD Socket篇

    iPhone socket 编程之BSD Socket篇 收藏在进行iPhone网络通讯程序的开发中,不可避免的要利用Socket套接字.iPhone提供了Socket网络编程的接口CFSocket, ...

  6. 老雷socket编程之websocket实现

    老雷socket编程之websocket实现 我们主要实现私聊和群聊两个功能,要在web端实现想微信QQ那样的即时通讯的功能,我们需要了解一下websocket.websocket是一种可以双向通讯的 ...

  7. python并发编程之Queue线程、进程、协程通信(五)

    单线程.多线程之间.进程之间.协程之间很多时候需要协同完成工作,这个时候它们需要进行通讯.或者说为了解耦,普遍采用Queue,生产消费模式. 系列文章 python并发编程之threading线程(一 ...

  8. python并发编程之gevent协程(四)

    协程的含义就不再提,在py2和py3的早期版本中,python协程的主流实现方法是使用gevent模块.由于协程对于操作系统是无感知的,所以其切换需要程序员自己去完成. 系列文章 python并发编程 ...

  9. python并发编程之asyncio协程(三)

    协程实现了在单线程下的并发,每个协程共享线程的几乎所有的资源,除了协程自己私有的上下文栈:协程的切换属于程序级别的切换,对于操作系统来说是无感知的,因此切换速度更快.开销更小.效率更高,在有多IO操作 ...

随机推荐

  1. PHP基础18:require和include

    <?phph //1.通过 include 或 require 语句,可以将 PHP 文件的内容插入另一个 PHP 文件(在服务器执行它之前) //include 和 require 语句是相同 ...

  2. C#委托Action、Action<T>、Func<T>、Predicate<T>

    CLR环境中给我们内置了几个常用委托Action. Action<T>.Func<T>.Predicate<T>,一般我们要用到委托的时候,尽量不要自己再定义一 个 ...

  3. xcode 出现the file couldn't be opened 怎么解决

    右键——show In finder——显示xcode包内容——将有数字的删除——把有用的xcode双击

  4. iOS开发系列--扩展--播放音乐库中的音乐

    众所周知音乐是iOS的重要组成播放,无论是iPod.iTouch.iPhone还是iPad都可以在iTunes购买音乐或添加本地音乐到音乐 库中同步到你的iOS设备.在MediaPlayer.fram ...

  5. 详解.NET IL代码

    一.前言 IL是什么? Intermediate Language (IL)微软中间语言 C#代码编译过程? C#源代码通过LC转为IL代码,IL主要包含一些元数据和中间语言指令: JIT编译器把IL ...

  6. 架构师速成-如何高效编程 for java

    引子 赵云大喝一声,挺枪骤马杀入重围,左冲右突,如入无人之境.那枪浑身上下,若舞梨花:遍体纷纷,如飘瑞雪. 赵云是所有历史人物中我最喜欢的一个,如果放到现代,他走了it的道路,一定可以成为一个编程高手 ...

  7. android之简易新闻客户端

    将一个新闻信息保存到一个XML文件中,并将放在服务器下.通过手机客户端来从服务器下载该文件并解析显示. news.xml <?xml version="1.0" encodi ...

  8. Linq之IQueryable接口与IEnumberable区别

    IEnumerable接口 公开枚举器,该枚举器支持在指定类型的集合上进行简单迭代.也就是说:实现了此接口的object,就可以直接使用foreach遍历此object: IEnumerable 包含 ...

  9. Graphics samples2

    为图形填充渐变色: Graphics2D g2=(Graphics2D)g; GradientPaint gra=new GradientPaint(20, 20, Color.BLUE, 100,8 ...

  10. android常用的弹出提示框

    我们在平时做开发的时候,免不了会用到各种各样的对话框,相信有过其他平台开发经验的朋友都会知道,大部分的平台都只提供了几个最简单的实现,如果我们想实现自己特定需求的对话框,大家可能首先会想到,通过继承等 ...