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