还是那个题目(题目和流程见java版本),感觉光用java写一点新意也没有,恰巧刚学习了python,何不拿来一用,呵呵:
服务器端:
python 代码
- import SocketServer, time
-
- class MyServer(SocketServer.BaseRequestHandler):
- userInfo = {
- 'yangsq' : 'yangsq',
- 'hudeyong' : 'hudeyong',
- 'mudan' : 'mudan' }
-
- def handle(self):
- print 'Connected from', self.client_address
-
- while True:
- receivedData = self.request.recv(8192)
- if not receivedData:
- continue
-
- elif receivedData == 'Hi, server':
- self.request.sendall('hi, client')
-
- elif receivedData.startswith('name'):
- self.clientName = receivedData.split(':')[-1]
- if MyServer.userInfo.has_key(self.clientName):
- self.request.sendall('valid')
- else:
- self.request.sendall('invalid')
-
- elif receivedData.startswith('pwd'):
- self.clientPwd = receivedData.split(':')[-1]
- if self.clientPwd == MyServer.userInfo[self.clientName]:
- self.request.sendall('valid')
- time.sleep(5)
-
- sfile = open('PyNet.pdf', 'rb')
- while True:
- data = sfile.read(1024)
- if not data:
- break
- while len(data) > 0:
- intSent = self.request.send(data)
- data = data[intSent:]
-
- time.sleep(3)
- self.request.sendall('EOF')
- else:
- self.request.sendall('invalid')
-
- elif receivedData == 'bye':
- break
-
- self.request.close()
-
- print 'Disconnected from', self.client_address
- print
-
- if __name__ == '__main__':
- print 'Server is started\nwaiting for connection...\n'
- srv = SocketServer.ThreadingTCPServer(('localhost', 50000), MyServer)
- srv.serve_forever()
说明:
- line-55到line-58的作用就相当于java中某个类里面的main函数,即一个类的入口。
- python中SocketServer module里提供了好多实用的现成的类,BaseRequestHandler就是一个,它的作用是为每一个请求fork一个线程,只要继承它,就有这个能力了,哈哈,真是美事。
- 当然,我们继承了BaseRequestHandler,就是override它的handle方法,就像java中继承了Thread后要实现run方法一样。实际上这个handle方法的内容和我们的java版本的run函数实现的完全一样。
- line-30到line-43就是处理文件下载的主要内容了。看着都挺眼熟的呵:)
- 这里在文件发送完后发了一个“EOF”,告诉client文件传完了。
客户端:
python 代码
- import socket, time
-
- class MyClient:
-
- def __init__(self):
- print 'Prepare for connecting...'
-
- def connect(self):
- sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- sock.connect(('localhost', 50000))
-
- sock.sendall('Hi, server')
- self.response = sock.recv(8192)
- print 'Server:', self.response
-
- self.s = raw_input("Server: Do you want get the 'thinking in python' file?(y/n):")
- if self.s == 'y':
- while True:
- self.name = raw_input('Server: input our name:')
- sock.sendall('name:' + self.name.strip())
- self.response = sock.recv(8192)
- if self.response == 'valid':
- break
- else:
- print 'Server: Invalid username'
-
- while True:
- self.pwd = raw_input('Server: input our password:')
- sock.sendall('pwd:' + self.pwd.strip())
- self.response = sock.recv(8192)
- if self.response == 'valid':
- print 'please wait...'
-
- f = open('b.pdf', 'wb')
- while True:
- data = sock.recv(1024)
- if data == 'EOF':
- break
- f.write(data)
-
- f.flush()
- f.close()
-
- print 'download finished'
- break
- else:
- print 'Server: Invalid password'
-
-
- sock.sendall('bye')
- sock.close()
- print 'Disconnected'
-
- if __name__ == '__main__':
- client = MyClient()
- client.connect()
line-34到line-41处理文件下载,client收到server的“EOF”信号后,就知道文件传完了。
最后需要说明一下python的文件,由于是内置类型,所以不想java那样有那么多的reader,writer,input,ouput啊。python中,在打开或建立一个文件时,主要是通过模式(mode)来区别的。
python的网络编程确实简单,因为它提供了各种功能的已经写好的类,直接继承就Ok了。
python还在学习中,上面的例子跑通是没问题,但写得肯定不够好,还得学习啊
分享到:
相关推荐
根据给定文件的信息,我们可以提炼出以下关于使用Python与gSOAP实现Server/Client模式的关键知识点: ### Python ZSI 模块介绍 - **模块概述**:Python ZSI(Zolera System Inc.)是一个用于创建和操作Web服务的...
1. Server.py 或 Server.java:这是服务器端的代码,可能使用Python或Java编写,负责监听网络连接,处理client的请求,执行操作并回送结果。 2. Client.py 或 Client.java:客户端代码,用于发送命令并接收响应,...
本文将详细介绍如何使用Python的Socket库来实现一个简单的TCP Server和Client,并结合实例代码进行分析。 #### 一、Socket基础知识 **1.1 Socket简介** - **定义**:Socket通常被称为“套接字”,它是网络通信的一...
本文将深入探讨如何使用Python实现一个简单的HTTP服务器,支持GET和POST请求。通过理解这个过程,你可以更好地理解网络通信的基本原理,以及Python在网络编程中的应用。 首先,让我们了解HTTP(超文本传输协议)的...
因为需要最近看了一下通过POST请求传输文件的内容 并且自己写了Server和Client实现了一个简单的机遇HTTP的文件传输工具 二、实现代码: Server端: 复制代码 代码如下:#coding=utf-8 from BaseHTTPServer import ...
在这个项目中,我们利用Python的socket库来构建一个简单的文件传输系统,包括服务器端到客户端(Server-to-Client)和客户端到服务器(Client-to-Server)的文件传输。 首先,我们要理解socket库的基础概念。Socket...
这个文件很可能包含了使用Python内置的`http.server`模块创建一个简单的HTTP服务器的代码。`http.server`提供了一些基础类,如`BaseHTTPRequestHandler`和`HTTPServer`,它们可以被继承和扩展以处理HTTP请求。通常,...
在Python中,使用socket模块实现文件传输是一个基础且实用的技能。本文将详细介绍在Python环境下,如何使用socket传输包括图片和视频在内的各种文件。文章内容涵盖了服务器端和客户端的代码实现,以及文件处理的相关...
4. **FTP(File Transfer Protocol)**:虽然Python可以自定义实现文件传输,但也可以利用标准库`ftplib`来实现FTP协议,方便地上传和下载文件。FTP适合于需要权限验证和管理的场景。 5. **HTTP/HTTPS**:Python的`...
在本项目中,"OpenCV+TCP+server+...总结来说,"OpenCV+TCP+server+client.zip"项目是一个结合了计算机视觉、网络编程和实时数据传输的实用示例,展示了如何使用Python和OpenCV构建一个简单的局域网视频监控系统。
这次我使用的是socket实现client与ftp server之间的通讯和文件传输,client另起一个flask服务器,用于用户在浏览器端的交互。系统实现的功能有:用户登录注册,用户查看ftp服务器端文件和下载上传删除操作,支持多...
在Django这样的Python Web框架中,如果需要连接到SQL Server 10.0,SQL Server Native Client可以作为一个必要的驱动来实现这一功能。Django通常通过Python的数据库API(如pymssql或pyodbc)与数据库进行交互,而...
Python实现简单的FTP程序涉及到网络编程和文件操作,主要利用了Python的socketserver模块来构建一个基本的FTP服务器,以及socket库来处理网络通信。FTP协议是基于TCP/IP协议的,通常由命令通道和数据通道组成,用于...
5. **安全性**:SQL Server Native Client 11包含了最新的安全特性,如集成Windows身份验证、加密连接、最小权限原则等,确保数据在传输和存储过程中的安全性。 6. **安装文件**:压缩包中的`sqlncli_11_x64.msi`是...
在IT行业中,C/S(客户端/服务器)模式是一种常见的架构设计,它分为客户端(Client)和服务器端(Server)两部分。在这个模式中,客户端负责与用户交互,发送请求到服务器,而服务器则处理这些请求并返回结果。C/S...
在Python编程中,实现服务器(Server)与多个客户端(Client)之间的通信是常见的网络编程任务。这个场景通常涉及网络协议,如TCP/IP或UDP,以及多线程或多进程技术来处理来自不同客户端的并发请求。在这个项目中,...
在给定的文件中,`socker_server.py`是服务器端代码,它主要负责读取YAML配置文件,获取文件信息,并通过Socket接口与客户端建立TCP连接,实现文件的发送。在Python中,可以使用内置的`socket`模块创建Socket对象,...
在Python编程中,`socket`模块是用于网络通信的基础接口,它可以实现客户端(client)与服务器端(server)之间的数据交换。在这个场景中,我们有`client.py`和`server.py`两个文件,分别代表了客户端和服务器端的...
在Python中,我们可以使用各种库来实现Modbus通信,其中一个常见的库是`pyModbusTCP`,这也是压缩包文件`pyModbusTCP-master`所包含的内容。 在深入探讨Python实现Modbus TCP通信之前,我们先理解一下Modbus的基本...