博客专栏

EEPW首页 > 博客 > python视频教程之socket使用实例详解

python视频教程之socket使用实例详解

发布人:only1 时间:2020-09-23 来源:工程师 发布文章

  今天扣丁学堂给大家详细介绍一下关于python视频教程之socket使用实例,首先Python在网络通讯方面功能强大,学习一下Socket通讯的基本方式吧。下面我们一起来看一下吧。

  UDP通讯:


  Server:


  importsocket


  port=8081


  s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)


  #从指定的端口,从任何发送者,接收UDP数据


  s.bind(('',port))


  print('正在等待接入...')


  whileTrue:


  #接收一个数据


  data,addr=s.recvfrom(1024)


  print('Received:',data,'from',addr)


  Client:


  importsocket


  port=8081


  host='localhost'


  s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)


  s.sendto(b'hello,thisisatestinfo!',(host,port))


  很简单。下面是TCP方式:


  Server:


  #-*-coding:utf-8-*-


  fromsocketimport*


  fromtimeimportctime


  HOST=''


  PORT=12345


  BUFSIZ=1024


  ADDR=(HOST,PORT)


  sock=socket(AF_INET,SOCK_STREAM)


  sock.bind(ADDR)


  sock.listen(5)


  whileTrue:


  print('waitingforconnection')


  tcpClientSock,addr=sock.accept()


  print('connectfrom',addr)


  whileTrue:


  try:


  data=tcpClientSock.recv(BUFSIZ)


  except:


  print(e)


  tcpClientSock.close()


  break


  ifnotdata:


  break


  s='Hi,yousendme:[%s]%s'%(ctime(),data.decode('utf8'))


  tcpClientSock.send(s.encode('utf8'))


  print([ctime()],':',data.decode('utf8'))


  tcpClientSock.close()


  sock.close()


  Client:


  #-*-coding:utf-8-*-


  fromsocketimport*


  classTcpClient:


  HOST='127.0.0.1'


  PORT=12345


  BUFSIZ=1024


  ADDR=(HOST,PORT)


  def__init__(self):


  self.client=socket(AF_INET,SOCK_STREAM)


  self.client.connect(self.ADDR)


  whileTrue:


  data=input('>')


  ifnotdata:


  break


  self.client.send(data.encode('utf8'))


  data=self.client.recv(self.BUFSIZ)


  ifnotdata:


  break


  print(data.decode('utf8'))


  if__name__=='__main__':


  client=TcpClient()


  上面的TCP方式有个问题,不能退出,好吧,我们改造一下,使这个程序可以发送quit命令以退出:


  Server:


  #-*-coding:utf-8-*-


  fromsocketimport*


  fromtimeimportctime


  fromtimeimportlocaltime


  importtime


  HOST=''


  PORT=1122#设置侦听端口


  BUFSIZ=1024


  ADDR=(HOST,PORT)


  sock=socket(AF_INET,SOCK_STREAM)


  sock.bind(ADDR)


  sock.listen(5)


  #设置退出条件


  STOP_CHAT=False


  whilenotSTOP_CHAT:


  print('等待接入,侦听端口:%d'%(PORT))


  tcpClientSock,addr=sock.accept()


  print('接受连接,客户端地址:',addr)


  whileTrue:


  try:


  data=tcpClientSock.recv(BUFSIZ)


  except:


  #print(e)


  tcpClientSock.close()


  break


  ifnotdata:


  break


  #python3使用bytes,所以要进行编码


  #s='%s发送给我的信息是:[%s]%s'%(addr[0],ctime(),data.decode('utf8'))


  #对日期进行一下格式化


  ISOTIMEFORMAT='%Y-%m-%d%X'


  stime=time.strftime(ISOTIMEFORMAT,localtime())


  s='%s发送给我的信息是:%s'%(addr[0],data.decode('utf8'))


  tcpClientSock.send(s.encode('utf8'))


  print([stime],':',data.decode('utf8'))


  #如果输入quit(忽略大小写),则程序退出


  STOP_CHAT=(data.decode('utf8').upper()=="QUIT")


  ifSTOP_CHAT:


  break


  tcpClientSock.close()


  sock.close()


  Client:


  #-*-coding:utf-8-*-


  fromsocketimport*


  classTcpClient:


  #测试,连接本机


  HOST='127.0.0.1'


  #设置侦听端口


  PORT=1122


  BUFSIZ=1024


  ADDR=(HOST,PORT)


  def__init__(self):


  self.client=socket(AF_INET,SOCK_STREAM)


  self.client.connect(self.ADDR)


  whileTrue:


  data=input('>')


  ifnotdata:


  break


  #python3传递的是bytes,所以要编码


  self.client.send(data.encode('utf8'))


  print('发送信息到%s:%s'%(self.HOST,data))


  ifdata.upper()=="QUIT":


  break


  data=self.client.recv(self.BUFSIZ)


  ifnotdata:


  break


  print('从%s收到信息:%s'%(self.HOST,data.decode('utf8')))


  if__name__=='__main__':


  client=TcpClient()


  以上就是关于python模块之socket实例的详细介绍,最后想要了解更多关于Python发展前景趋势,请关注扣丁学堂官网、微信等平台,扣丁学堂IT职业在线学习教育平台为您提供权威的Python培训视频教程系统,通过千锋扣丁学堂金牌讲师在线录制的第一套自适应Python在线视频课程系统,让你快速掌握Python从入门到精通开发实战技能。扣丁学堂Python技术交流群:816572891。

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。



关键词:

相关推荐

技术专区

关闭