Python网络编程-Socket简单通信(及python实现远程文件发送)
学习python中使用python进行网络编程,编写简单的客户端和服务器端进行通信,大部分内容来源于网络教程,这里进行总结供以后查阅。
先介绍下TCP的三次握手:
![]() |
![]() |
1,简单的发送消息:
服务器端:
import socket sk = socket.socket()
ip_port = ("127.0.0.1", 8888)
sk.bind(ip_port)
sk.listen(5)
print("正在进行等待接受数据...")
conn, address = sk.accept()
msg = "hello world!"
conn.send(msg.encode())
conn.close()
客户端:
import socket client = socket.socket() ip_port = ("127.0.0.1", 8888)
client.connect(ip_port)
data = client.recv(1024)
print(data.decode())
这里并不能连续发送消息,一次连接发送消息后程序终止。
2.1,连续的发送消息(TCP方式)
服务器端:
import socket
import random
sk = socket.socket()
ip_port = ("127.0.0.1", 8888)
sk.bind(ip_port)
sk.listen(5)
while True:
print("正在进行等待接受数据...")
conn, address = sk.accept()
msg = "hello world!"
conn.send(msg.encode())
while True:
data=conn.recv(1024)
print(data.decode())
if data==b'exit':
break
conn.send(data)
conn.send(str(random.randint(1,1000)).encode())
conn.close()
客户端:
import socket client = socket.socket() ip_port = ("127.0.0.1", 8888)
client.connect(ip_port) while True:
data = client.recv(1024)
print(data.decode())
msg_input=input("please input mesage to send...")
client.send(msg_input.encode())
if msg_input== b'exit':
break
data = client.recv(1024)
print(data.decode())
使用while函数,来连续的发送消息。
2.2,连续的发送消息(UDP方式)
服务器端:
import socket #定义udp方式
sk=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
ip_port=("127.0.0.1",8888)
sk.bind(ip_port) while True:
data=sk.recv(1024)
print(data.decode())
客户端:
#udp
import socket sk=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
ip_port=("127.0.0.1",8888)
while True:
msg_input=input("please input message to send...")
if msg_input==b'exit':
break
sk.sendto(msg_input.encode(),ip_port)
sk.close()
3,多客户端发送消息(TCP方式)
服务器端:
#tcp
import socketserver
import random class MyServer(socketserver.BaseRequestHandler):
def setup(self):
pass
def handle(self):
conn=self.request
msg="hello world!"
conn.send(msg.encode())
while True:
data= conn.recv(1024)
print(data.decode())
if data== b'exit':
break
conn.send(data)
conn.send(str(random.randint(1,1000)).encode())
conn.close() def finish(self):
pass if __name__=="__main__":
server=socketserver.ThreadingTCPServer(("127.0.0.1",8888),MyServer)
server.serve_forever()
客户端:
#tcp
import socket client = socket.socket() ip_port = ("127.0.0.1", 8888)
client.connect(ip_port) while True:
data = client.recv(1024)
print(data.decode())
msg_input=input("please input mesage to send...")
client.send(msg_input.encode())
if msg_input== b'exit':
break
data = client.recv(1024)
print(data.decode())
启动服务器端后,服务器端等待客户端程序连接,我们可以启动多个客户端来连接服务器端。
******************************************************************************************************************************************************************************************************************************
一个小应用:
******************************************************************************************************************************************************************************************************************************
文件发送和接收程序:
服务器端(接收):
#file upload server import socket sk=socket.socket() ip_port=("127.0.0.1",8888) sk.bind(ip_port)
sk.listen(5)#最大连接数
while True:
conn,address=sk.accept()#等待连接
while True:#连接成功后一直使用当前连接,直到退出
with open("file_rec","ab") as f :
data=conn.recv(1024)
if data==b'quit':
break
f.write(data)
conn.send("success".encode())
print("file rec accomplish...")
conn.close()
客户端(发送):
#file upload
import socket sk=socket.socket()
ip_port=("127.0.0.1",8888)
sk.connect(ip_port) with open('__init__.py','rb') as f:
for i in f:
sk.send(i)
data=sk.recv(1024)
if data !=b'success':
break sk.send('quit'.encode())
注:内容来源于互联网
Python网络编程-Socket简单通信(及python实现远程文件发送)的更多相关文章
- Python -- 网络编程 -- Socket简单网络通信
Qt如果多线程的话,似乎会出BUG 1.服务端(server.py) import sys, socket, threading import binascii from PyQt4 import Q ...
- Python网络编程socket
网络编程之socket 看到本篇文章的题目是不是很疑惑,what is this?,不要着急,但是记住一说网络编程,你就想socket,socket是实现网络编程的工具,那么什么是socket,什么是 ...
- Day07 - Python 网络编程 Socket
1. Python 网络编程 Python 提供了两个级别访问网络服务: 低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口 ...
- python网络编程-socket套接字通信循环-粘包问题-struct模块-02
前置知识 不同计算机程序之间数据的传输 应用程序中的数据都是从程序所在计算机内存中读取的. 内存中的数据是从硬盘读取或者网络传输过来的 不同计算机程序数据传输需要经过七层协议物理连接介质才能到达目标程 ...
- python网络编程-socket编程
一.服务端和客户端 BS架构 (腾讯通软件:server+client) CS架构 (web网站) C/S架构与socket的关系: 我们学习socket就是为了完成C/S架构的开发 二.OSI七层 ...
- python网络编程socket /socketserver
提起网络编程,不同于web编程,它主要是C/S架构,也就是服务器.客户端结构的.对于初学者而言,最需要理解的不是网络的概念,而是python对于网络编程都提供了些什么模块和功能.不同于计算机发展的初级 ...
- python --- 网络编程Socket
网络编程 定义:所为网络编程即是对信息的发送和接收. 主要工作: (1)发送端:将信息以规定的协议组装成数据包. (2)接收端:对收到的数据包解析,以提取所需要的信息. Socket:两个在网络上的程 ...
- Day10 Python网络编程 Socket编程
一.客户端/服务器架构 1.C/S架构,包括: 1.硬件C/S架构(打印机) 2.软件C/S架构(web服务)[QQ,SSH,MySQL,FTP] 2.C/S架构与socket的关系: 我们学习soc ...
- python网络编程——socket基础篇
python的网络编程比c语言简单许多, 封装许多底层的实现细节, 方便程序员使用的同时, 也使程序员比较难了解一些底层的东西. 1 TCP/IP 要想理解socket,首先得熟悉一下TCP/IP协议 ...
随机推荐
- 搭建web之 服务器鉴权失败,请确认服务器已启用密码鉴权并且账号密码正确?
实例化时,登录过程中出现 服务器鉴权失败! 这是由于密码错误所致! 第一种情况:原始随机密码 第一种情况,你没有修改密码,则可以直接查找原始密码: 过程详见官网 使用密码登录的前提条件 密码: 若用户 ...
- HighLight.js 使用Demo
复制下面代码,保存为html,浏览器打开预览即可. <!DOCTYPE html> <html> <head> <meta charset="utf ...
- Python之基础练习代码
代码1: # -*- coding: utf-8 -*- def function(*numbers): sum = 0 for num in numbers: sum = sum + num*num ...
- ThreadPoolExcutor 线程池 异常处理 (下篇)
前言 因为这是之前面试的一个题目,所以印象比较深刻,前几天写了一篇文章:ThreadPoolExcutor 线程池 异常处理 (上篇) 中已经介绍了线程池异常的一些问题以及一步步分析了里面的一些源代码 ...
- vivado和modelsim联合调试仿真
vivado和modelsim联合调试仿真 0赞 发表于 2017/5/10 19:10:59 阅读(881) 评论(0) 使用vivado和modelsim联合调试仿真时,在破解完modelsim后 ...
- 快速入门 WePY 小程序【转】
一.WePY介绍 WePY 是 腾讯 参考了Vue 等框架对原生小程序进行再次封装的框架,更贴近于 MVVM 架构模式, 并支持ES6/7的一些新特性. 二.WePY 使用 1.WePY的安装或更新都 ...
- Java多线程:Java内存模型
参考资料: 程晓明:Java内存模型 <Java并发编程的艺术> <深入理解Java虚拟机:JVM高级特性与最佳实践>
- Java反射+简单工厂模式总结
除了 new 之外的创建对象的方法 通过 new 创建对象,会使得程序面向实现编程,先举个例子,某个果园里现在有两种水果,一种是苹果,一种是香蕉,有客户想采摘园子里的水果,要求用get()方法表示即可 ...
- SpringBoot系统列 5 - 接口版本控制、SpringBoot FreeMarker模板引擎
接着上篇博客的代码继续写 1.接口版本控制 一个系统上线后会不断迭代更新,需求也会不断变化,有可能接口的参数也会发生变化,如果在原有的参数上直接修改,可能会影响线上系统的正常运行,这时我们就需要设置不 ...
- .net framework 项目 build 出现 未能加载文件或程序集“netfx.force.conflicts”或它的某一个依赖项
问题描述 Severity Code Description Project File Line Suppression State Error 未能加载文件或程序集"netfx.force ...