暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Python网络编程 之 网络通信过程

我们的编程日记 2018-10-27
182

Python进阶系列

python网络编程 之 网络通信过程

(服务端与客户端编写)


本文使用的环境:win10 + 虚拟机 ubuntu16.04

使用到的软件:网络调试助手,python3

代码在ubuntu中编写执行


1.UDP  用户数据报协议   不稳定;比tcp快  

2.TCP   传输控制协议    稳定;比udp慢  


完成一个tcp服务器的功能流程:

  1. socket 创建套接字

  2. bind 绑定 ip 和 port

  3. listen 使套接字变为可以被动连接

    accept 等待客户端的连接

    recv send 接收发送数据



    编写简单TCP服务端程序

from socket import *

#创建tcp套接字
serverSocket = socket(AF_INET,SOCK_STREAM)
#绑定ip,port
serverSocket.bind(("",8890))
#允许的最大连接数
serverSocket.listen(5)

print("-1-服务器启动")
#clientSocket 表示这个新客户端,clienttInfo表示新客户端的信息
#等待客户端连接
clientSocket,clientInfo = serverSocket.accept()
print("-2-客户端已连接")

#等待发送数据
recvData = clientSocket.recv(1024)

print("-3-接收到客户端数据:")
print("%s:%s"%(str(clientInfo),recvData))

clientSocket.close()
serverSocket.close()

先查看ubuntu中的ip,执行代码后,打开「网络调试助手」并连接ubuntu的ip填写端口号:

连接成功并发送数据



编写简单TCP客户端程序


from socket import *

clientSocket = socket(AF_INET,SOCK_STREAM)
#连接服务器
clientSocket.connect(("192.168.112.1",8989))

#向服务器发送消息,
# send()和udp的sendto()不同因为tcp客户端 已连接服务器,而不再需要填ip
clientSocket.send("hello zranfly".encode("gb2312"))

#接收打印服务器发来的消息
recvData = clientSocket.recv(1024)
print("recvData:%s"%recvData)

clientSocket.close()

#注意tcp胡udp不同的地方:send()和sendto();recv()和recvfrom()

使用网络调试助手当做服务器


客户端结果


TCP与UDP的简单对比


TCP与UDP的服务器对比



                 #TCP 服务器基本过程

tcpSocket = socket(AF_INET,SOCK_STREAM) #创建tcp套接字  
tcpSocket.bind()                        #绑定ip和port
tcpSocket.listen()                      #监听连接
while XXX:                              #服务器无限循环
   tcpClient = tcpSocket.accept()      #接收/等待客户端的连接
   while XXX:                          #通信循环
       data = tcpClient.recv() tcpClient.send()  #对话(接收/发送)
       可添加其他条件退出循环

   tcpClient.close()                   #关闭 客户端 套接字
tcpSocket.close()                       #关闭 服务端 套接字

                 #UDP 服务器基本过程

udpSocket = socket()         #创建 udp 套接字
udpSocket.bind()             #绑定信息
while XXX:                   #服务器无限循环
   data,addr = udpSocket.recvfrom() udpSocket.sendto() #关闭 接收/发送
    #可添加其他条件退出循环
udpSocket.close()  #关闭服务器套接字



TCP与UDP客户端对比



                      #TCP客户端
clientSockent = socket()  #创建tcp客户端套接字
clientSocket.connect()    #尝试连接服务器
while XXX:                #通信循环
   data = clientSockent.send() clientSocket.recv()  #对话 (发送 接收)
    #可添加其他条件退出循环
clientSocket.close()      #关闭客户端套接字


                     #UDP客户端
clientSocket = socket()   #创建客户端套接字
while XXX:                #通信循环
   data,addr = clientSocket.sendto() / clientSocket.recvfrom()  #对话
   #可添加其他条件退出循环
clientSocket.close()      #关闭套接字


 拥抱新技术

   不要给自己设限!


文章转载自我们的编程日记,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论