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. Qt——正则表达式

    在项目中经常会遇到对字符串进行操作的情况,我们可以直接使用QString的一些函数,但QT提供了一个更加强大的类——QRegExp,使用正则表达式来操作字符串. 先说说我最近遇到的几个问题: 1.对输 ...

  2. [git]图解git常用命令

    本文图解git中最常用的命令.如果你稍微理解git的工作原理,这篇文章能够让你理解的更透彻. 基本用法 约定 命令详解 Diff Commit Checkout Detached HEAD(匿名分支提 ...

  3. Linux第十一次学习笔记

    异常控制流 异常控制流(ECF)发生在计算机系统的各个层次 在硬件层,硬件检测到的事件会触发控制突然转移到异常处理程序. 在操作系统层,内核通过上下文转换将控制从一个用户进程转移到另一个用户进程. 在 ...

  4. Java JSON、XML文件/字符串与Bean对象互转解析

    前言      在做web或者其他项目中,JSON与XML格式的数据是大家经常会碰见的2种.在与各种平台做数据对接的时候,JSON与XML格式也是基本的数据传递格式,本文主要简单的介绍JSON/XML ...

  5. 小白安装linux(虚拟机)red hat enterprise linux 6

    额,这篇貌似是我名义上的第一篇博客,但是我好像没有第一写他,没事,都一样.(我会假装它是人生中第一篇博客的) 上大学之后,很久之后才发现自己听喜欢linux的,因为感觉很高大上,所以自己自学了很多关于 ...

  6. Siege——多线程编程最佳实例

    在英语中,“Siege”意为围攻.包围.同时Siege也是一款使用纯C语言编写的开源WEB压测工具,适合在GNU/Linux上运行,并且具有较强的可移植性.之所以说它是多线程编程的最佳实例,主要原因是 ...

  7. js的基本的一些方法

    我们不是要背诵东西,只是因为这是我们生存的技能. 加油吧少年! 1.函数的块级作用域和函数的自我执行是一回事.!(function () { function box(){alert('hello') ...

  8. 项目笔记---Windows Service调用Windows API问题

    概要 此文来自于最近一个“诡异”的Windows API调用发现Windows Service在调用某些Windows API的过程中失效,在经过漫长的Baidu,之后终于在StackOverFlow ...

  9. OneZero第一次会议(非正式)

    会议时间:2016年3月20日 15:50~16:50 会议成员:冉华(http://www.cnblogs.com/ranh941/) 张敏(http://www.cnblogs.com/zhang ...

  10. java多线程-Semaphore信号量使用

    介绍 信号量(Semaphore),有时被称为信号灯,是在多线程环境下使用的一种设施, 它负责协调各个线程, 以保证它们能够正确.合理的使用公共资源. 概念 Semaphore分为单值和多值两种,前者 ...