python bind sock_Python网络编程-Socket简单通信(及python实现远程文件发送)

这篇博客介绍了使用Python进行网络编程的基础知识,包括TCP的三次握手,实现简单客户端和服务器端的通信。通过while循环实现了连续发送消息的功能,对比了TCP和UDP方式的区别。此外,还展示了如何处理多客户端连接,以及文件的发送和接收程序。内容涵盖了网络连接、数据传输和并发处理等核心概念。
摘要由CSDN通过智能技术生成

学习python中使用python进行网络编程,编写简单的客户端和服务器端进行通信,大部分内容来源于网络教程,这里进行总结供以后查阅。

先介绍下TCP的三次握手:

4910fe7a100a480c5bd5ab2fc55212fc.png

f50ace1956be95211ec0081f0774a42f.png

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())

注:内容来源于互联网

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值