说明

前一段时间学习python网络编程,完成简单的通过python实现网络通信的功能。现在,将python中Socket

通信的基本实现过程做一个记录备份.

Socket通信

python 中的socket通信较为简单,仅需要几行代码就可实现。和一般的网络通信一样,通信方式分为udp和tcp两种方式,两种方式的处理也略有不同。tcp通信为传输控制协议(Transmission control Protocol),是一种面向连接、可靠的、基于字节流的传输层通信协议(TCP/IP协议簇划分的通信协议的其中一层);udp通信为用户数据报协议(User Datagram Protocol),是一种面向无连接、不可靠的、基于报文的传输层通信协议。就是TCP/IP中的两种传输层通信协议,有关TCP/IP和TCP、UDP的详细介绍视情况而定看是否需要单独介绍,由于内容涉及较广,个人并不能完全完整详细的介绍仔细。

python网络通信需要导入一个socket模块来支持通信过程。socket通信分为客户端和服务端。服务端负责监听当前设备接口的信息发送情况,客户端实现通过ip和接口向目的主机发送信息的功能。接下来,主要看python中的tcp、udp的通信方法.

1) tcp

服务端代码如下:

    import socket

    #socket.AF_INET:ipv4,socket.SOCK_STREAM:tcp
server_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
server_socket.bind((target,port))
server_socket.listen(5)
while True:
client_socket,addr=server_socket.accept()
client_handler=threading.Thread(target=handler_socket,args=(client_socket,addr,mode))
client_handler.start() def handler_socket(client_socket,addr,mode="tcp"):
response=""
content=""
print "Accepted tcp connection from:%s:%d" % (addr[0],addr[1])
while True:
response=client_socket.recv(2048)
content+=response
while len(response)<2048:
print "content:%s" % content
response=""
content=""
a=raw_input("send to:")
if len(a):
client_socket.send(a)

客户端代码:

 client=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
client.connect((target,port))
a=raw_input("input your text what you want to send:")
if len(a):
client.send(a) while True:
buffer=""
response=""
a=""
while "\n" not in response:
response=client.recv(2048)
buffer+=response
print "Received buffer:%s" % buffer
a=raw_input("send to server:")
if len(a):
client.send(a)

2) udp

服务段代码:

   #socket.AF_INET:ipv4,socket.SOCK_STREAM:udp
sever_socket=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
server_socket.bind((target,port))
server_socket.listen(5)
while True:
client_socket,addr=server_socket.accept()
client_handler=threading.Thread(target=handler_socket,args=(client_socket,addr,mode))
client_handler.start()
pass def handler_socket(client_socket,addr,mode="tcp"):
response=""
content=""
print "Accepted udp connection from:%s:%d" % (addr[0],addr[1])
while True:
response=client_socket.recvfrom(2048)
content+=response
while len(response) <2048:
print "content:%s" % content
response=""
content=""
a=raw_input("send to:")
if len(a):
client_socket.sendto(a,addr)

客户端代码

    client=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
a=raw_input("input your text what you want to send:")
if len(a):
client.sendto(a,(target,port))
while True:
buffer=""
response=""
a=""
while "" in response:
response,addr=client.recvfrom(4096)
print "Received buffer:%s" % buffer
a=raw_input("send to server:")
if len(a):
client.send(a)

如上为基本的实现tcp/udp实现socket同学的基础用法,我写了一个可选tcp/udp socket通信的的实例代码在github,源码地址为:socket通信

enjoytoday,enjoycoding

python中Socket的使用的更多相关文章

  1. 操作系统底层原理与Python中socket解读

    目录 操作系统底层原理 网络通信原理 网络基础架构 局域网与交换机/网络常见术语 OSI七层协议 TCP/IP五层模型讲解 Python中Socket模块解读 TCP协议和UDP协议 操作系统底层原理 ...

  2. python中socket模块详解

    socket模块简介 网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket.socket通常被叫做"套接字",用于描述IP地址和端口,是一个通信 ...

  3. Python中socket经ssl加密后server开多线程

            前几天手撸Python socket代码,撸完之后经过ssl加密,确保数据的安全,外加server端开启多线程保证一个客户端连接有一个线程来服务客户端,走了不少的弯路,网上的信息啥的要 ...

  4. 全网最详细python中socket套接字send与sendall的区别

    将数据发送到套接字. 套接字必须连接到远程套接字.  返回发送的字节数. 应用程序负责检查是否已发送所有数据; 如果仅传输了一些数据, 则应用程序需要尝试传递剩余数据.(需要用户自己完成) 将数据发送 ...

  5. python中socket编程

    一.网络协议 客户端/服务器架构 1.硬件C/S架构(打印机) 2.软件C/S架构(互联网中处处是C/S架构):B/S架构也是C/S架构的一种,B/S是浏览器/服务器 C/S架构与socket的关系: ...

  6. python中socket、进程、线程、协程、池的创建方式和应用场景

    进程 场景 利用多核.高计算型的程序.启动数量有限 进程是计算机中最小的资源分配单位 进程和线程是包含关系 每个进程中都至少有一条线程 可以利用多核,数据隔离 创建 销毁 切换 时间开销都比较大 随着 ...

  7. python中socket、socketio、flask-socketio、WebSocket的区别与联系

    socket.socketio.flask-socketio.WebSocket的区别与联系 socket 是通信的基础,并不是一个协议,Socket是应用层与TCP/IP协议族通信的中间软件抽象层, ...

  8. python中socket理论

    Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口.在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单 ...

  9. Python中Socket编程server与client简单的合法性认证

    导入python自带的hmac模块对随机生成的位数32字节和自定义token进行加密处理 import osmsg = os.urandom(32)  #随机生成msgOut[4]: b"F ...

随机推荐

  1. 在python函数中默认参数的一些坑

    一.默认参数 python为了简化函数的调用,提供了默认参数机制: 这样在调用pow函数时,就可以省略最后一个参数不写: 在定义有默认参数的函数时,需要注意以下: 必选参数必须在前面,默认参数在后: ...

  2. Vim 宏实战操作

    宏的概念 什么是宏呢?英文名:macro,代表一串命令的集合. 示例操作文本 SELECT * FROM `edu_ocr_task` WHERE ((`userId`=284871) AND (`u ...

  3. k8s kubernetes 核心笔记 镜像仓库 项目k8s改造(含最新k8s v1.16.2版本)

    k8s kubernetes 核心笔记 镜像仓库 项目k8s改造 2019/10/24 Chenxin 一 基本资料 一 参考: https://kubernetes.io/ 官网 https://k ...

  4. CodeForces - 1230C(思维/暴力)

    题意 https://vjudge.net/problem/CodeForces-1230C 给了你总共有21张多米诺骨牌,每张牌有两个面,然后给你一个无向图,保证没有环和一个顶点多条边的情况存在.现 ...

  5. Windows下Python虚拟环境

    python的虚拟环境在windows和linux下的配置是不一样的 主要解决开发应用程序的时候Python依赖包的版本问题 虚拟环境 virtualenv 安装 pip install virtua ...

  6. SQL注入神器———Sqlmap!

    Sqlmap 开源,python编写 支持5种SQL注入检测技术: 1.基于布尔的注入检测 2.基于时间的注入检测 3.基于错误的注入检测 4.基于UNION联合查询的检测 5.基于堆叠查询的检测 支 ...

  7. LG4377 「USACO2018OPEN」Talent Show 分数规划+背包

    问题描述 LG4377 题解 有 \(n\) 个物品,每个物品有两个权值 \(a,b\) 需要确定一组 \(w_i \in [0,1]\) ,使得 \(\frac{\sum{w_i \times a_ ...

  8. 解决Fiddler在win7系统下的安全证书问题

    如果电脑win7系统,一直解决不了Fiddler的证书安装问题,可以试试下面的办法. 在安装证书的时候一直遇到这个问题. 这是因为win7系统的在.net Framework4.0上面的bug引起的. ...

  9. BERT-wwm、BERT-wwm-ext、RoBERTa、SpanBERT、ERNIE2

    一.BERT-wwm wwm是Whole Word Masking(对全词进行Mask),它相比于Bert的改进是用Mask标签替换一个完整的词而不是子词,中文和英文不同,英文中最小的Token就是一 ...

  10. Codeforces Round #603 (Div. 2) B. PIN Codes 水题

    B. PIN Codes A PIN code is a string that consists of exactly 4 digits. Examples of possible PIN code ...