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())
注:内容来源于互联网
如果你真心觉得文章写得不错,而且对你有所帮助,那就不妨小小打赏一下吧,如果囊中羞涩,不妨帮忙“推荐"一下,您的“推荐”和”打赏“将是我最大的写作动力!
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接.