python python网络编程pdf 怎么实现自写的server和client交互?

由 匿名 (未验证)
前端时间学习了python 语言,对python语言有了一定的理解。下面和大家一起分享自己在使用Socket库进行编程的原理在阅读这篇文章之前,默认您已经学会了Python基本知识,废话不多说,自己写了一个小程序,直接上原理图和代码,希望各位网友多多指正。1:目的
利用socket编写客户端和服务器代码,实现多个客户端能够正常访问服务器,能够处理信息和访问Html静态网页
1:基础知识
Socket于年在佳利福尼亚大学伯克利分校的一个研究组诞生,的出现是为了在操作系统中进行软件移植。同时将移植结果提供给其他节点。作为项目的一部分,设计器创建了一个接口,该接口可由应用程序使用,以便于实现通信网络上的两个程序建立连接进行双向通信,从而达到交换数据的目的。而通信网络上的另外一端被称为套接字。客户机和服务器需要一个端口建立网络通信连接。用户称该端口为套接口。套接字实际上就是一个编程接口,简称API,同时为程序员提供了网络开发的接口。通过该接口,程序员可以更好地开发软件,这就是是套接字编程接口。2:基础调用 当客户机和服务器使用Socket连接时,服务器首先处于开启状态,侦听请求。socket()
#调用套接字bind()
#绑定套接字使用的端口,即绑定和端口号connect()
#建立连接函数listen()
#进行系统侦听请求的函数,侦听由客户端发送的的消息accept()
#接受侦听到的请求,建立连击,send()
#发送数据recv()
#接收数据sendto()
#在进行无连接()时数据发送recvfrom()
#在进行无连接()时数据接收close()
#数据传输完成后关闭套接字3:Socket编程原理
服务器程序流程图
客户端程序流程图
4:服务器程序和客户端程序#coding=utf-8
from multiprocessing import Process
#导入Python自带库的Process模块
import SimpleHTTPServer
#导入Http请求模块
import SocketServer
#导入SockrtServer,该模块封装了Socketde 部分功能
from socket import *
#导入Sockret中的所有内容
from threading import Thread
(4)处理HTTP请求模块
HOST = ("192.168.50.92")
#服务器地址
PORT = 7782
处理HTTP请求模块
def handleHttp():
#定义函数处理HTTP请求模块
Handler = SimpleHTTPServer.SimpleHTTPRequestHandler
httpd = SocketServer.TCPServer((HOST, PORT), Handler,)
print "--进程2--等待处理http请求--服务已开启在", PORT,"端口"
httpd.serve_forever()
(5) Socket基础配置,包括创建Socket,绑定主机地址,建立侦听状态
serSocket = socket(AF_INET,SOCK_STREAM)
#socket基础配置模块
serSocket.setsockopt(SOL_SOCKET,SO_REUSEADDR,1)
addr=("",7788)
serSocket.bind((addr))
serSocket.listen(100)
sockets = []
(6)监听客户端请求模块,利用While循环监听客户端请求
def process_1():
#监听请求模块
global addr
#定义全局变量
print("--进程1--,--等待新客户端连接--")
print('waiting for connecting...')
while True:
clientSock, addr = serSocket.accept()
print('connected from:%s'%str(addr))
print("成功连接")
clientSock.setblocking(0)
sockets.append(clientSock)
(7)处理Client端请求模块
def handleClient():
while True:
for newSocket in sockets:
recvData = newSocket.recv(1024)
print("----线程处理请求中---")
if len(recvData) & 0:
print "recv info form client%s:%s" %(str(addr) ,str(recvData))
sendData = (recvData)
# 向客户端发送收到的数据
newSocket.send(sendData)
# 发送的数据
"%s客户端已经关闭" % str(addr)
except Exception as e:
if __name__ == '__main__':
P1 = Process(target=handleHttp)
P1.start()
client = Thread(target=handleClient,)
client.start()
process_1()客户端程序:#coding=utf-8
from socket import * #导入socket模块
tcpClientSocket = socket(AF_INET,SOCK_STREAM) #创建套接字,指明socket的类型是TCP套接字
IP=("192.168.50.131")
InfoLen = 1024
#传输的最大长度
tcpClientSocket.connect((IP,Port))
#绑定IP和端口,进行数据传输
tcpClientSocket.setsockopt(SOL_SOCKET,SO_REUSEADDR,1)
def send_request():
while True:
print("---已连接服务器,发送数据中---")
sendData = raw_input("客户端:")
if len(sendData)&0:
#判断发送数据的长度,长度大于零,将要发送的数据进行编码
tcpClientSocket.send(str(sendData))
#向Server端发送数据
print("您发送的是空数据")
recvData = tcpClientSocket.recv(infoLen)
#接收从Server端返回的数据
print"收到服务器数据:%s"% (str(recvData))
except Exception as error:
print(error)
print("---请求连接服务器---")
if __name__ == '__main__':
send_request()5:测试
将该程序在Linux上运行测试,首先查看Ubuntu本机的,在命令行模式下输入,查看虚拟机的,得到本机的为,
首先运行服务器程序。
测试时,在Windows运行多个客户端程序,运行环境为,在不同的客户端输入不同的数据,这时客户端显示成功连接并接收了从服务器返回的数据。服务端则打印了客户端的地址和发送的数据。
Windows仔细看图,发现ip和端口都是相同的说明都是同一台电脑发送的信息
在来开启一台进行测试,看看能否访问成功。
可以看到都能够成功访问,小编在这里就不一一测试了,不使用Linux,使用Windows也可以进行测试
下面来测试处理HTTP请求:处理HTTP请求,以浏览器作为客户端,在浏览器中输入服务器地址:,向服务器发送请求,看服务器响应情况。需要将该网页丢到你的项目文件目录下。这是小编自己写的第一个Html页面,自学Bootstrap框架写的,Bootstrap框架非常强大,有兴趣的同学可以看看中文教程
服务器处理请求的情况;
第一次写博文,写得不好各位博友勿喷,谢谢。,希望各位网友多多指点。python网络编程(基于twisted的客户端编程)
python的twisted比较有意思,既可以做server方面的,也可以做client方面的编程。关于这方面的编程,最简单的例子就是echo。
client 代码如下,
#!/usr/bin/python
from twisted.internet.protocol import Protocol, ClientFactory
from sys import stdout
from twisted.internet import reactor
class Echo(Protocol):
def dataReceived(self, data):
stdout.write(data)
class EchoClientFactory(ClientFactory):
def startedConnecting(self, connector):
print 'Started to connect.'
def buildProtocol(self, addr):
print 'Connected.'
return Echo()
def clientConnectionLost(self, connector, reason):
print 'Lost connection. Reason:', reason
def clientConnectionFailed(self, connector, reason):
print 'Connection failed. Reason:', reason
if __name__ == '__main__':
reactor.connectTCP('localhost', 1234, EchoClientFactory())
reactor.run()
server 代码如下,
#!/usr/bin/python
from twisted.internet import protocol, reactor, endpoints
class Echo(protocol.Protocol):
def dataReceived(self, data):
self.transport.write(data)
class EchoFactory(protocol.Factory):
def buildProtocol(self, addr):
return Echo()
if __name__ == '__main__':
endpoints.serverFromString(reactor, &tcp:1234&).listen(EchoFactory())
reactor.run()#!/usr/bin/env python
#--coding:utf8--
简单的回显客户端/服务器应用
1.先创建一个TCP套接字
2.启用重用地址
3.套接字绑定在本地设备的指定端口
4.监听阶段,把backlog参数传入listen()方法中
5.服务器监听多个客户端。等待客户端连接,向服务器发送一些数据。收到数据后,回显数据给客户端。
argparse是python用于解析命令行参数和选项的标准模块,用于代替已经过时的optparse模块
socket,sys,argparse
host = 'localhost'
data_payload = 8192
backlog = 5
def echo_server(port):
# Create a TCP socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# Enable reuse address/port
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
# Bind the socket to the port
server_address = (host, port)
sock.bind(server_address)
# Listen to clients, backlog argument specifies the max no. of queued connections
sock.listen(backlog)
while True:
print "Waiting to receive message from client"
clientsocket, address = sock.accept()
data = clientsocket.recv(data_payload)
print "client Data: %s" %data
clientsocket.send(data)
print "sent %s bytes back to %s" % (data, address)
# end connection
clientsocket.close()
if __name__ == '__main__':
echo_server(port=8000)client:
#!/usr/bin/env python
#--coding:utf8--
简单的回显客户端/服务器应用
1.先创建一个TCP套接字
2.启用重用地址
3.套接字绑定在本地设备的指定端口
4.监听阶段,把backlog参数传入listen()方法中
5.服务器监听多个客户端。等待客户端连接,向服务器发送一些数据。收到数据后,回显数据给客户端。
argparse是python用于解析命令行参数和选项的标准模块,用于代替已经过时的optparse模块
socket,sys,argparse
host = 'localhost'
data_buff = 8192
def echo_client(port,message):
""" A simple echo client """
# Create a TCP/IP socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# Connect the socket to the server
server_address = (host, port)
sock.connect(server_address)
# Send data
# Send data
#message = "I'm client: This message will be echoed"
print "Sending: %s" % message
sock.sendall(message)
# Look for the response
while True:
data = sock.recv(data_buff)
print "Received for service: %s" % data
sock.close()
except socket.errno, e:
print "Socket error: %s" %str(e)
except Exception, e:
print "Other exception: %s" %str(e)
print "Closing connection to the server"
sock.close()
if __name__ == '__main__':
message="I'm client: This message will be echoed"
echo_client(port,message)
从0到1学习笔记:使用Python搭建简单的服务器,实现页面分发与数据接口功能
接到个小活,要实现一个局域网内的小服务器,需求如下:1.实现静态文件下发功能,主要是apk安装包和html及其相关文件;2.实现数据接口,用于存储和查询网内其他设备发来的数据;3.实际使用者电脑能力一...
websocekt-python与Js交互(1)
下载了一个websocket的demo,tcp流式socket,发现代码中,服务端有发送请求头的代码,就想着是不是两端都要遵循着三次握手的原则,就好顿查。以下是知识科普,补一补忘掉的只是,代码在下一章...
Python Web开发——学习笔记
1、Web应用开发可以说是目前软件开发中最重要的部分。Web开发也经历了好几个阶段:
静态Web页面:由文本编辑器直接编辑并生成静态的HTML页面,如果要修改Web页面的内容,就需要再次编辑HTML...
Python编写的客户端给服务器发送指令执行相应的命令并返回结果
闲来无事,用python写个客户端与服务器端应答的程序,主要原理就是客户端通过tcp协议与服务器端通信,客户端给服务器端发送指令,服务器执行指令后把相应的结果返回给客户端,客户端打印结果,代码比较简单...
Python服务器与多种客户端(Python/Java/Android)之间的通信
我们不会一直满足于客户端程序的开发,因为太过受限了。为了打破这样的受限,你需要做的就是去编写服务器端代码。以及如何在服务器与客户端之间的通信。以下将对此以Python为服务器,并分别以Python、J...
i春秋作家:wasrehpic0×00 前言「网络」一直以来都是黑客最热衷的竞技场。数据在网络中肆意传播:主机扫描、代码注入、网络嗅探、数据篡改重放、拒绝服务攻击……黑客的功底越深厚,能做的就越多。P...
import socket #导入sockrt模块
import threading
serverscoket=socket.socket(socket.AF_INET,socket....
环境:Fedora12 + python2.6.2
#!/usr/bin/python
import socket
srvsock = socket.socket(socket...
TCP同步&em&回显客户&/em&、&em&服务端&/em& 立即下载
上传者: 江湖小小虾米 时间: ...&em&python&/em&实现udp服务器&em&和客户端&/em&简单例子 立即下载
上传者: luoyanhanhan 时间: 201...
#!/usr/bin/python
import socket
srvsock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM...
没有更多推荐了,扫一扫体验手机阅读
python实现select和epoll模型socket网络编程
<span type="1" blog_id="1344824" userid='
157篇文章,320W+人气,20粉丝
运维开发全攻略
¥51.0032人订阅
大数据时代的微服务之路
¥51.00513人订阅
<span type="1" blog_id="1344824" userid='关于TCPServer和TCPClient的一个简单例子……不能理解
[问题点数:100分,结帖人LastAvengers]
本版专家分:879
结帖率 100%
CSDN今日推荐
本版专家分:879
本版专家分:879
本版专家分:10079
2007年11月 Delphi大版内专家分月排行榜第二
本版专家分:11621
本版专家分:879
本版专家分:2588
本版专家分:0
匿名用户不能发表回复!
其他相关推荐}

我要回帖

更多关于 python网络编程书籍 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信