首页 > temp > python入门教程 >
-
Python连载53-UDP、TCP、FTP编程实例
一、服务器程序要求永远运行,一般用死循环来处理
1.服务器改造版本V03(主程序
原封不动,这里只修改了运行的程序) if __name__ == "__main__": while True: try: print("Start Server") serverFunc() print("End Server") except Exception as e: print(e) time.sleep(1)
二、TCP编程
1.面向链接的传输,即每次传输之前需要先建立一个实例
2.客户端和服务端两个程序需要编写
3.Server端的编写流程
(1)建立socket负责具体通信,这个socket其实只负责接受对方的请求
(2)绑定端口和地址
(3)监听接入的访问socket
(4)接受访问的socket,可以理解接受访问即建立了一个通讯的链接通路
(5)接受对方的发送内容,利用接收到的socket接受内容
(6)如果有必要,给对方发送反馈信息
(7)关闭链接通路
4.Client端流程
(1)建立通信socket
(2)链接对方,请求跟对方建立通路
(3)发送内容到对方服务器
(4)接受对方的反馈
(5)关闭链接通路
5.举例
import socket def tcp_srv(): sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)#其哪一个参数为ipv4,后一个参数为TCP固定参数 addr = ("127.0.0.1",8998)#ip地址和端口号 sock.bind(addr)#绑定addr sock.listen()#监听接入的访问socket while True: #接受访问的socket,可以理解为接受访问即建立一个通讯的链接通路,accept返回的元组第一个元素赋给skt,第二个元素赋给addr skt,addr = sock.accept()#第一个元素是socket,第一个元素就是发送方的地址 #接受对方的发送内容,利用接受到的socket接受内容 msg = skt.recv(500)#500代表接收使用的buffersize,理解为接受内容的大小 msg = msg.decode()#接受到的是bytes格式内容,想得到str格式的,需要进行解码 #下面三行代表反馈的信息 rst = "Received msg:{0} from {1}".format(msg,addr) print(rst) skt.send(rst.encode()) #关闭socket skt.close() if __name__ == "__main__": print("Startint tcp server.......") tcp_srv() print("Ending tcp server.........")
import socket def tcp_clt(): sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM) addr = ("127.0.0.1",8998) sock.connect(addr)#链接addr这个地址,建立tcp这个通道 msg = "I am a good man" sock.send(msg.encode()) rst = sock.recv(500)#接受对方的反馈 print(rst.decode()) sock.close() if __name__ == "__main__": tcp_clt()
解释:先运行了服务器端的程序一次,然后运行了客户端程序四次,可以看到服务器端(端口8998)接收到了四次客户端发来的消息,并且每一次发来消息的端口都不一样,按照升序53256-53259.
三、FTP编程
FTP(FileTransferProtocal)文件传输协议
用途:定制一些特殊的上传下载文件的服务
用户分类:登录FTP服务器必须有一个账号
(1)Real账户:注册账户
(2)Guest账户:可能临时对某一类人的行为进行授权
(3)Anoymous账户:匿名账户,允许任何人
四、源码
D33_3_LoopOfServer.py
D33_4_TCPSever.py
D33_5_TCPClient.py
https://github.com/ruigege66/Python_learning/blob/master/D33_3_LoopOfServer.py
https://github.com/ruigege66/Python_learning/blob/master/D33_4_TCPSever.py
https://github.com/ruigege66/Python_learning/blob/master/D33_5_TCPClient.py
2.CSDN:https://blog.csdn.net/weixin_44630050(心悦君兮君不知-睿)
出 处:
https://www.cnblogs.com/ruigege0000/p/11925336.html