学习python中使用python进行网络编程,编写简单的客户端和服务器端进行通信,大部分内容来源于网络教程,这里进行总结供以后查阅。
先介绍下TCP的三次握手:
1,简单的发送消息:
服务器端:
importsocket
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()
客户端:
importsocket
client=socket.socket()
ip_port= ("127.0.0.1", 8888)
client.connect(ip_port)
data= client.recv(1024)print(data.decode())
这里并不能连续发送消息,一次连接发送消息后程序终止。
2.1,连续的发送消息(TCP方式)
服务器端:
importsocketimportrandom
sk=socket.socket()
ip_port= ("127.0.0.1", 8888)
sk.bind(ip_port)
sk.listen(5)whileTrue:print("正在进行等待接受数据...")
conn, address=sk.accept()
msg= "hello world!"conn.send(msg.encode())whileTrue:
data=conn.recv(1024)print(data.decode())if data==b'exit':breakconn.send(data)
conn.send(str(random.randint(1,1000)).encode())
conn.close()
客户端:
importsocket
client=socket.socket()
ip_port= ("127.0.0.1", 8888)
client.connect(ip_port)whileTrue:
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':breakdata= client.recv(1024)print(data.decode())
使用while函数,来连续的发送消息。
2.2,连续的发送消息(UDP方式)
服务器端:
importsocket#定义udp方式
sk=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
ip_port=("127.0.0.1",8888)
sk.bind(ip_port)whileTrue:
data=sk.recv(1024)print(data.decode())
客户端:
#udp
importsocket
sk=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
ip_port=("127.0.0.1",8888)whileTrue:
msg_input=input("please input message to send...")if msg_input==b'exit':breaksk.sendto(msg_input.encode(),ip_port)
sk.close()
3,多客户端发送消息(TCP方式)
服务器端:
#tcp
importsocketserverimportrandomclassMyServer(socketserver.BaseRequestHandler):defsetup(self):pass
defhandle(self):
conn=self.request
msg="hello world!"conn.send(msg.encode())whileTrue:
data= conn.recv(1024)print(data.decode())if data== b'exit':breakconn.send(data)
conn.send(str(random.randint(1,1000)).encode())
conn.close()deffinish(self):pass
if __name__=="__main__":
server=socketserver.ThreadingTCPServer(("127.0.0.1",8888),MyServer)
server.serve_forever()
客户端:
#tcp
importsocket
client=socket.socket()
ip_port= ("127.0.0.1", 8888)
client.connect(ip_port)whileTrue:
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':breakdata= client.recv(1024)print(data.decode())
启动服务器端后,服务器端等待客户端程序连接,我们可以启动多个客户端来连接服务器端。
******************************************************************************************************************************************************************************************************************************
一个小应用:
******************************************************************************************************************************************************************************************************************************
文件发送和接收程序:
服务器端(接收):
#file upload server
importsocket
sk=socket.socket()
ip_port=("127.0.0.1",8888)
sk.bind(ip_port)
sk.listen(5)#最大连接数
whileTrue:
conn,address=sk.accept()#等待连接
while True:#连接成功后一直使用当前连接,直到退出
with open("file_rec","ab") as f :
data=conn.recv(1024)if data==b'quit':breakf.write(data)
conn.send("success".encode())print("file rec accomplish...")
conn.close()
客户端(发送):
#file upload
importsocket
sk=socket.socket()
ip_port=("127.0.0.1",8888)
sk.connect(ip_port)
with open('__init__.py','rb') as f:for i inf:
sk.send(i)
data=sk.recv(1024)if data !=b'success':breaksk.send('quit'.encode())
注:内容来源于互联网