网络编程之 Udp发送数据

发布时间:2020-07-06 03:58:48 作者:ckllf
来源:网络 阅读:271

  demo:编写程序

  linux中写程序不一定用pycharm

  用pycharm或者vim或者sublime编辑器

  Sublime编辑时:保存到一定次数是会提醒是否购买;右下角按钮可以选择语言;鼠标移动到上方会看到菜单栏,“首选项”中有配色方案-改完之后菜单栏如果不见了,重新开一下;支持拖放文件夹到编辑器左侧;

  Sublime中

  Sublime中保存:CTRL+S

  按住Ctrl和加号:放大字体

  **

  Udp发送数据

  1. 代码大概结构如下:

  import socket

  def main():

  #创建一个udp套接字

  udp_socket=socket.socket(socket.af_inet,socket.sock_dgram)

  #可以使用套接字收发数据

  #关闭套接字

  udp_socket.close()

  if__name__=”__main__”:

  main()

  写完程序后运行,与pycharm中不同:

  打开终端,cd到py文件所在的文件夹,vim 文件名.py python3 文件名.py

  如果用python2运行,Python 文件名.py 现在都用python3

  

网络编程之 Udp发送数据


  运行测试完成后,接下来用vim打开文件 用vim编辑:

  用sublime编辑的用 vim打开,缩进的有点多,

  vim缩进命令如下:

  ESC 进入命令模式,大V, 上下键 选中一片, shift+< 向左缩进,向右缩进shift+>

  因为文件中没有任何显示运行的命令,所以终端中无法看到程序是否能正常运行,回到文件,增加一个测试命令:print(——run——)

  小程序用终端和vim 大工程用pycharm

  2. 完成发送功能:

  在编辑模式下,敲完udp 然后Ctrl n会出现自动补全,上下键选弹出的内容,选中后回车

  import socket

  def main():

  #创建一个udp套接字

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

  #可以使用套接字收发数据

  #两个参数,第一个是内容,第二个是一个元组(ip,port),

  #port是一个数字,不要用双引号,ip要用双引号扩起来。

  #udp_socket.sendto(“hahahah”,对方的ip和port)

  # 此时,用这个电脑来发给另外一台电脑来验证程序,

  # 比如自己的ubantu发给自己的windows,但是windows中需要有个程序来接收,

  #利用课程发的网络调试助手用来接收数据。

  udp_socket.sendto(“hahahah”,(“192.168.33.53”,8080))

  #关闭套接字

  udp_socket.close()

  if__name__=”__main__”:

  main()

  然后在终端中python3 文件名.py运行

  此时报错了,提示第9行是字符串“hahaha”,解决方案,前面加b,就不是字符串了b “hahaha”

  再次运行时仍报错,显示网络不错,因为windows的ip是192.163.33.53,ubantu的ip是172.16.7.137,两个ip前三个字段不同,不在同一个网络里。

  此时在ubantu终端中输入命令:ping 192.168.33.53,如果ping能通,说明可以通信,否则不能通信。如果ping不成功,改成桥接。菜单栏中“虚拟机”-“设置”-“网络适配器”-“自动检测”点终端上门的按钮,选择“桥接模式”,然后回到终端ifconfig

  如果网络还不通,在ubantu终端输入命令:sudo dhclient 等待分配IP 如果是桥接模式,一般分配的ip会与windows在同一个网络号。再ping一下Windows的ip,如果出现消耗了多少时间,说明此时可以通信了。

  如果测试中出现问题,是因为电脑中装了vmware,导致一台电脑中有多个ip,此时将VMware的网络断开就可以通信了。

  注意:udp_socket.sendto(b“hahahah”,(“192.168.33.53”,8080)) 中写ip时,ip要写Windows的,不管Windows中的网络调试助手中显示的ip是多少,要通过Windows开始中cmd命令,ipconfig出来的ip才是真正要接收数据的ip

  Ubantu终端中: Python3 :进入交互模式 exit( )退出交互,用来验证某些知识点 Python3

  文件名.py:运行这个文件 ipython3也是交互模式,比python3高端,能自动补全,支持清屏,ls,建议使用ipython3

  Ubantu终端中:复制文件命令,cp 01-socket的基本使用.py 02-发送任意数据给Windows中的调试助手.py

  意思就是把01文件复制一份,重命名为02

  3. 通过键盘获取发送内容来发送任意信息

  然后vim 02-XXXX打开之后的程序与刚才一模一样,代码如下:

  import socket

  def main():

  #创建一个udp套接字

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

  #从键盘获取数据,就可以实现发送任意数据了,并用send_data变量存储,

  send_data = input(“请输入你要发的信息:”)

  #可以使用套接字收发数据,此处就不能在变量前加b了,把这句代码变成注释,yy p复制这句代码,重新编辑

  #udp_socket.sendto(b“hahahah”,(“192.168.33.53”,8080))

  #input获取的东西是以字符串存储的,不能直接把b“hahahah”换成send_data,用encode(“utf-8”)方法

  udp_socket.sendto(send_data.encode(“utf-8”),(“192.168.33.53”,8080))

  #关闭套接字

  udp_socket.close()

  if__name__=”__main__”:

  main()无锡妇科检查医院 http://www.87554006.com/

  **4. 循环发送数据

  以上代码可以完成发送任意信息,但是如果想循环发,需要while true,

  终端中: cp一份02文件,cp 02xx.py 03循环发送数据.py vim 03…打开,ESC V 选中一段代码,shift >

  整体向右缩进

  保存并退出vim编辑器,按esc进入命令模式后,输入:wq,一定 要输入冒号

  import socket

  def main():

  #创建一个udp套接字

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

  while true:

  #从键盘获取数据,就可以实现发送任意数据了,并用send_data变量存储,

  send_data = input(“请输入你要发的信息:”)

  udp_socket.sendto(send_data.encode(“utf-8”),(“192.168.33.53”,8080))

  #关闭套接字

  udp_socket.close()

  if__name__=”__main__”:

  main()

  终端中:

  运行程序进行测试,如果要结束程序,ctrl c

  **5 带有退出功能的循环发送

  cp 03 04带有退出功能的循环发送.py

  import socket

  def main():

  #创建一个udp套接字

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

  while true:

  #从键盘获取数据,就可以实现发送任意数据了,并用send_data变量存储,

  send_data = input(“请输入你要发的信息:”)

  #如果输入的数据是exit,那就退出程序,break是直接退while,continue是退出这一次,后面的继续执行,然后再while true

  If send_data ==”exit”:

  break

  udp_socket.sendto(send_data.encode(“utf-8”),(“192.168.33.53”,8080))

  #关闭套接字

  udp_socket.close()

  if__name__=”__main__”:

  main()


推荐阅读:
  1. python的网络编程介绍
  2. linux高性能网络编程读书笔记之socket数据读写

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

udp %d

上一篇:Elasticsearch集群

下一篇:如何解决登录OneDrive时报错Error 0x8004d

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》