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. phpmailer 参数使用说明

    $AltBody--属性 出自:PHPMailer::$AltBody 文件:class.phpmailer.php 说明:该属性的设置是在邮件正文不支持HTML的备用显示 AddAddress--方 ...

  2. Android开发探秘之一:创建可以点击的Button

    感觉到自己有必要学习下手机开发方面的知识,不论是为了以后的工作需求还是目前的公司项目. 当然,任何新东西的开始,必然伴随着第一个HelloWorld,Android学习也不例外.既然才开始,我就不做过 ...

  3. CSS 动画之十-图片+图片信息展示

    这个动画主要是运用了一些css3的特性,效果是展示一张商品图片,然后在商品图片的制定位置显示该商品的详细信息.效果在chrome浏览器中预览. <!DOCTYPE html> <ht ...

  4. IOS开发之——Masonry 只支持OC,暂不支持swift

    前言 1 MagicNumber -> autoresizingMask -> autolayout 以上是纯手写代码所经历的关于页面布局的三个时期 在iphone1-iphone3gs时 ...

  5. 20145215实验四 Android开发基础

    20145215实验四 Android开发基础 实验内容 基于Android Studio开发简单的Android应用并部署测试; 了解Android组件.布局管理器的使用: 掌握Android中事件 ...

  6. 关于JavaScript打印去掉页眉页脚

    因为这个问题,Google和百度都查了个遍,网上主要解决方案都是这一个代码: <script language="JavaScript"> var hkey_root, ...

  7. 【Lucene实验1】构建索引

    一.实验名称:构建索引 二.实验日期:2013/9/21 三.实验目的: 1)        能理解Lucene中的Document-Field结构的数据建模过程: 2)        能编针对特定数 ...

  8. 如何使用impress.js做一个网页版本的PPT

    blockquote{font-size: 18px;line-height:1.5;margin:0;}line-height: 1.5; 要做一个网站制作规范培训,之前村长做过一次培训,但是后来一 ...

  9. Linq之求和,平均值,最大值,最小值

    写在前面 最近一直在弄统计的内容,和统计相关的操作,就需要用到了,而有些在数据库中操作起来非常不方便,没办法就用c#中的linq来实现了. 代码 一个例子 using System; using Sy ...

  10. angular自己的笔记

    angular知道怎么用了, 就打算读一读源代码; <html ng-app="phonecatApp"> <head> <meta charset= ...