Pyhton高级-Socket
1,UDP实现收发数据
- import socket
- def send_msg(udp_socket):
- """获取键盘数据,并将其发送给对方"""
- # 1. 从键盘输入数据
- msg = input("\n请输入要发送的数据:")
- # 2. 输入对方的ip地址
- dest_ip = input("\n请输入对方的ip地址:")
- # 3. 输入对方的port
- dest_port = int(input("\n请输入对方的port:"))
- # 4. 发送数据
- udp_socket.sendto(msg.encode("utf-8"), (dest_ip, dest_port))
- def recv_msg(udp_socket):
- """接收数据并显示"""
- # 1. 接收数据
- recv_msg = udp_socket.recvfrom(1024)
- # 2. 解码
- recv_ip = recv_msg[1]
- recv_msg = recv_msg[0].decode("GBK")
- # 3. 显示接收到的数据
- print(">>>%s:%s" % (str(recv_ip), recv_msg))
- def main():
- # 1. 创建套接字
- udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
- # 2. 绑定本地信息
- udp_socket.bind(("", 8081))
- while True:
- # 3. 选择功能
- print("="*30)
- print("1:发送消息")
- print("2:接收消息")
- print("="*30)
- op_num = input("请输入要操作的功能序号:")
- # 4. 根据选择调用相应的函数
- if op_num == "":
- send_msg(udp_socket)
- elif op_num == "":
- recv_msg(udp_socket)
- else:
- print("输入有误,请重新输入...")
- if __name__ == "__main__":
- main()
- """
- 备注:socket软件的安装位置:d:\hercules-3-2-8.exe
- """
2,TCP-客户端
- import socket
- # 创建tcp套接字
- tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- # 指定服务器IP地址和端口号
- server_ip = ('192.168.30.175', 8080)
- # 连接服务器
- tcp_socket.connect(server_ip)
- # 输入要发送的内容
- send_msg = input("你说:")
- # 向服务器发送数据
- tcp_socket.send(send_msg.encode('utf8'))
- # 接收服务器消息
- recv_data = tcp_socket.recv(1024)
- print("他说:%s" % recv_data.decode('GBK'))
- # 关闭套接字
- tcp_socket.close()
3,TCP-服务器端
- import socket
- # 创建tcp套接字
- tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- # 指定服务器IP地址和端口号
- server_ip = ('192.168.30.175', 8080)
- # 连接服务器
- tcp_socket.connect(server_ip)
- # 输入要发送的内容
- send_msg = input("你说:")
- # 向服务器发送数据
- tcp_socket.send(send_msg.encode('utf8'))
- # 接收服务器消息
- recv_data = tcp_socket.recv(1024)
- print("他说:%s" % recv_data.decode('GBK'))
- # 关闭套接字
- tcp_socket.close()
4,多线程-UDP
- import socket
- import threading
- def send_msg(udp_socket):
- """获取键盘数据,并将其发送给对方"""
- while True:
- # 1. 从键盘输入数据
- msg = input("\n请输入要发送的数据:")
- # 2. 输入对方的ip地址
- dest_ip = input("\n请输入对方的ip地址:")
- # 3. 输入对方的port
- dest_port = int(input("\n请输入对方的port:"))
- # 4. 发送数据
- udp_socket.sendto(msg.encode("utf-8"), (dest_ip, dest_port))
- def recv_msg(udp_socket):
- """接收数据并显示"""
- while True:
- # 1. 接收数据
- recv_msg = udp_socket.recvfrom(1024)
- # 2. 解码
- recv_ip = recv_msg[1]
- recv_msg = recv_msg[0].decode("gbk")
- # 3. 显示接收到的数据
- print(">>>%s:%s" % (str(recv_ip), recv_msg))
- def main():
- # 1. 创建套接字
- udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
- # 2. 绑定本地信息
- udp_socket.bind(("", 7890))
- # 3. 创建一个子线程用来接收数据
- t1 = threading.Thread(target=recv_msg, args=(udp_socket,))
- t1.start()
- # 4. 让主线程用来检测键盘数据并且发送
- send_msg(udp_socket)
- if __name__ == "__main__":
- main()
- """
- 多任务
- 实现同时收发,类似QQ即时通讯
- """
Pyhton高级-Socket的更多相关文章
- 【Socket】linux网络多路复用IO技术
1.mystery引入 1)Select是一种多路复用IO输入输出模式,在linux的输入输出编程中通过select的轮询机制,发现可用/可读或可写的接口. 2)低级socket程 ...
- 消息中间件——kafka
1.1.1 什么是消息中间件 消息中间件利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成.通过提供消息传递和消息排队模型,它可以在分布式环境下扩展进程间的通信.对 ...
- Python之路,Day8 - Python基础 面向对象高级进阶与socket基础
类的成员 类的成员可以分为三大类:字段.方法和属性 注:所有成员中,只有普通字段的内容保存对象中,即:根据此类创建了多少对象,在内存中就有多少个普通字段.而其他的成员,则都是保存在类中,即:无论对象的 ...
- 进击的Python【第十章】:Python的socket高级应用(多进程,协程与异步)
Python的socket高级应用(多进程,协程与异步)
- python开发学习-day08(socket高级、socketserver、进程、线程)
s12-20160305-day08 *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: ...
- CSIC_716_20191203【 socket网络编程,以及沾包问题的高级解决方式】
AF_UNIX(本机通信) AF_INET(TCP/IP – IPv4) AF_INET6(TCP/IP – IPv6) SOCK_STREAM(TCP流) SOCK_DGRAM(UDP数据报) 远程 ...
- 第九章:Python高级编程-Python socket编程
第九章:Python高级编程-Python socket编程 Python3高级核心技术97讲 笔记 9.1 弄懂HTTP.Socket.TCP这几个概念 Socket为我们封装好了协议 9.2 cl ...
- Linux高级编程--10.Socket编程
Linux下的Socket编程大体上包括Tcp Socket.Udp Socket即Raw Socket这三种,其中TCP和UDP方式的Socket编程用于编写应用层的socket程序,是我们用得比较 ...
- Python高级之Socket 探索(五)
目录: 面向对象 反射 socket 一.面向对象 方法 方法包括:普通方法.静态方法和类方法,三种方法在内存中都归属于类,区别在于调用方式不同. 普通方法:由对象调用:至少一个self参数:执行普通 ...
随机推荐
- STM32F407VG (五)定时器
一.定时器节本分类和主要特点 1.STM32定时器分类: 1)看门狗定时器 2)SysTick定时器 3)RTC定时器 4)通用定时器 a)通用定时器TIM2~TIM5, 当中TIM2和TIM5是32 ...
- mysql-5.5 for linux源码安装
mysql-5.5 for linux源码安装 1.使用Yum安装依赖软件包 # yum install -y gcc gcc-c++ gcc-g77 autoconf automake bison ...
- 使用 Swift 3.0 操控日期
作者:Joe,原文链接,原文日期:2016-09-20译者:Cwift:校对:walkingway:定稿:CMB 当你在想要 大规模重命名 时,一个附带的挑战就是要确保所有相关的文档都必须同步更新.比 ...
- warning: here-document at line 7 delimited by end-of-file (wanted `rui')
- 新建项目git clone
- A simple problem(并查集判环)
http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2497 题意:给定一些点和边的关系,判断S点是否 ...
- nodejs windows环境安装
相信对于很多关注javascript发展的同学来说,nodejs已经不是一个陌生的词眼.有关nodejs的相关资料网上已经铺天盖地.由于它的高并发特性,造就了其特殊的应用地位. 国内目前关注最高,维护 ...
- C - Haiku
Problem description Haiku is a genre of Japanese traditional poetry. A haiku poem consists of 17 syl ...
- C#:设置webBrowser框架与系统相对应的IE内核版本
通常情况下,我们直接调用C#的webBrowser控件,默认的浏览器内核是IE7. 那么如何修改控件调用的默认浏览器版本呢? /// <summary> /// 修改注册表信息来兼容当前 ...
- Vue蚂蜂窝Vue-cli+webpack做的
先来看下效果 项目地址 喜欢star一下哦