Python Socket使用实例


Posted in Python onDecember 18, 2017

Python在网络通讯方面功能强大,学习一下Socket通讯的基本方式

UDP通讯:

Server:

import socket
port=8081
s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
#从指定的端口,从任何发送者,接收UDP数据
s.bind(('',port))
print('正在等待接入...')
while True:
  #接收一个数据
  data,addr=s.recvfrom(1024)
  print('Received:',data,'from',addr)

Client:

import socket
port=8081
host='localhost'
s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
s.sendto(b'hello,this is a test info !',(host,port))

很简单 。下面是TCP方式:

Server:

#-*- coding: utf-8 -*-
from socket import *
from time import ctime

HOST=''
PORT=12345
BUFSIZ=1024
ADDR=(HOST, PORT)
sock=socket(AF_INET, SOCK_STREAM)

sock.bind(ADDR)

sock.listen(5)
while True:
  print('waiting for connection')
  tcpClientSock, addr=sock.accept()
  print('connect from ', addr)
  while True:
    try:
      data=tcpClientSock.recv(BUFSIZ)
    except:
      print(e)
      tcpClientSock.close()
      break
    if not data:
      break
    s='Hi,you send me :[%s] %s' %(ctime(), data.decode('utf8'))
    tcpClientSock.send(s.encode('utf8'))
    print([ctime()], ':', data.decode('utf8'))
tcpClientSock.close()
sock.close()

Client:

#-*- coding: utf-8 -*-
from socket import *

class TcpClient:
  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)

    while True:
      data=input('>')
      if not data:
        break
      self.client.send(data.encode('utf8'))
      data=self.client.recv(self.BUFSIZ)
      if not data:
        break
      print(data.decode('utf8'))
      
if __name__ == '__main__':
  client=TcpClient()

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

Server:

#-*- coding: utf-8 -*-
from socket import *
from time import ctime
from time import localtime
import time

HOST=''
PORT=1122 #设置侦听端口
BUFSIZ=1024
ADDR=(HOST, PORT)
sock=socket(AF_INET, SOCK_STREAM)

sock.bind(ADDR)

sock.listen(5)
#设置退出条件
STOP_CHAT=False
while not STOP_CHAT:
  print('等待接入,侦听端口:%d' % (PORT))
  tcpClientSock, addr=sock.accept()
  print('接受连接,客户端地址:',addr)
  while True:
    try:
      data=tcpClientSock.recv(BUFSIZ)
    except:
      #print(e)
      tcpClientSock.close()
      break
    if not data:
      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")
    if STOP_CHAT:
      break
tcpClientSock.close()
sock.close()

Client:

#-*- coding: utf-8 -*-
from socket import *

class TcpClient:
  #测试,连接本机
  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)

    while True:
      data=input('>')
      if not data:
        break
      #python3传递的是bytes,所以要编码
      self.client.send(data.encode('utf8'))
      print('发送信息到%s:%s' %(self.HOST,data))
      if data.upper()=="QUIT":
        break      
      data=self.client.recv(self.BUFSIZ)
      if not data:
        break
      print('从%s收到信息:%s' %(self.HOST,data.decode('utf8')))
      
      
if __name__ == '__main__':
  client=TcpClient()

注:以上代码为Python3。

总结

以上就是本文关于Python Socket使用实例的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题。如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

Python 相关文章推荐
python实现linux下使用xcopy的方法
Jun 28 Python
Python常用的内置序列结构(列表、元组、字典)学习笔记
Jul 08 Python
Python爬取附近餐馆信息代码示例
Dec 09 Python
python实现求解列表中元素的排列和组合问题
Mar 15 Python
Python实现App自动签到领取积分功能
Sep 29 Python
浅谈django三种缓存模式的使用及注意点
Sep 30 Python
python清除字符串前后空格函数的方法
Oct 21 Python
python 判断字符串中是否含有汉字或非汉字的实例
Jul 15 Python
Python 中判断列表是否为空的方法
Nov 24 Python
pytorch中的inference使用实例
Feb 20 Python
django haystack实现全文检索的示例代码
Jun 24 Python
Python偏函数实现原理及应用
Nov 20 Python
浅谈python数据类型及类型转换
Dec 18 #Python
Python字典,函数,全局变量代码解析
Dec 18 #Python
Python语言生成水仙花数代码示例
Dec 18 #Python
Python实现的双色球生成功能示例
Dec 18 #Python
Python实现的摇骰子猜大小功能小游戏示例
Dec 18 #Python
简单实现python进度条脚本
Dec 18 #Python
Python编程使用*解包和itertools.product()求笛卡尔积的方法
Dec 18 #Python
You might like
PHP 裁剪图片成固定大小代码方法
2009/09/09 PHP
让php处理图片变得简单 基于gb库的图片处理类附实例代码下载
2011/05/17 PHP
解析CI的AJAX分页 另类实现方法
2013/06/27 PHP
老司机传授Ubuntu下Apache+PHP+MySQL环境搭建攻略
2016/03/20 PHP
实例讲解通过​PHP创建数据库
2019/01/20 PHP
js滚动条多种样式,推荐
2007/02/05 Javascript
jQuery学习5 jQuery事件模型
2010/02/07 Javascript
jquery js 获取时间差、时间格式具体代码
2013/06/05 Javascript
node.js中的fs.mkdir方法使用说明
2014/12/17 Javascript
javascript简单实现滑动菜单效果的方法
2015/07/27 Javascript
Vue结合原生js实现自定义组件自动生成示例
2017/01/21 Javascript
Vue源码解析之数组变异的实现
2018/12/04 Javascript
微信小程序自定义带价格显示日历效果
2018/12/29 Javascript
Nodejs实现的操作MongoDB数据库功能完整示例
2019/02/02 NodeJs
Vue 动态组件components和v-once指令的实现
2019/08/30 Javascript
JavaScript 函数用法详解【函数定义、参数、绑定、作用域、闭包等】
2020/05/12 Javascript
vue实现信息管理系统
2020/05/30 Javascript
vue实现简单加法计算器
2020/10/22 Javascript
vue+Element-ui实现分页效果
2020/11/15 Javascript
[01:20]DOTA2 2017国际邀请赛冠军之路无止竞
2017/06/19 DOTA
python中使用pyhook实现键盘监控的例子
2014/07/18 Python
Python使用中文正则表达式匹配指定中文字符串的方法示例
2017/01/20 Python
Python中用psycopg2模块操作PostgreSQL方法
2017/11/28 Python
对pycharm代码整体左移和右移缩进快捷键的介绍
2018/07/16 Python
python中图像通道分离与合并实例
2020/01/17 Python
Python中关于logging模块的学习笔记
2020/06/03 Python
用python对excel进行操作(读,写,修改)
2020/12/25 Python
CSS3制作炫酷的自定义发光文字
2016/03/28 HTML / CSS
基层干部十八大感言
2014/01/19 职场文书
师生聚会感言
2014/01/26 职场文书
中学生评语大全
2014/04/18 职场文书
治安消防安全责任书
2014/07/23 职场文书
推广活动策划方案
2014/08/23 职场文书
保管员岗位职责
2015/02/14 职场文书
幼儿园2016年感恩节活动总结
2016/04/01 职场文书
分析SQL窗口函数之排名窗口函数
2022/04/21 Oracle