python高级语法-python网络编程(套接字编程)之UDP和TCP编程
2018-07-27 18:11
441 查看
存在两类协议UDP和TCP协议,前者是不安全的不面向链接的传输,速度快,后者是安全的面向链接的传输,速度慢。
下面主要演示两种编程实现简单的聊天:
首先,必须明确服务器和客户端的区别:
在服务器端连接ip地址和端口唯一指定这个程序,接受访问,给与反馈,优秀的服务器永远不会停止运行。
在客户端访问服务器,发送消息,给与反馈。
所有都要求先有服务器开启才能客户端连接。
UDP示例代码:
服务器端代码
[code]import socket def serverFunc(): # 建立socket # socket.AF_INET使用ipv4协议族 # socket.SOCK_DGRAM使用udp通讯 sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 绑定ip和port # 127.0.0.1代表机器本身(这里也可以指定其他ip地址) # 端口7852(随机选择一个而已) # 地址是一个tuple类型。(ip,port) addr = ("127.0.0.1", 7677) sock.bind(addr) # 接受对方消息 # 等待方式为死等,没有其他可能性 # recvfrom接受的返回值是一个tuple, 前一项表示数据,后一项表示地址 # 参数的含义是缓冲区大小 while True: data, addr = sock.recvfrom(500) # 发送过来的数据是byte 类型,解码才得字符串 print("收到消息:"+data.decode()) rsp = input("发送消息:") # 发送数据编码成为byte data = rsp.encode() sock.sendto(data, addr) if __name__ == '__main__': print("start Server") serverFunc() print("end Server")
客户端代码:
[code]import socket def clientFunc(): sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) while True: text = input("发送消息:") # 发送的str必须编码 data = text.encode() # 向该位置发送数据 sock.sendto(data, ("127.0.0.1", 7677)) # 接受反馈 data, addr = sock.recvfrom(200) # 解码数据 data = data.decode() print("收到消息:"+data) if __name__ == '__main__': clientFunc()
演示结果:
TCP示例代码:(具体内容不备注,类似上面)
服务器端代码:
[code]import socket def tcp_srv(): # 建立socket进行通讯 # socket.AF_INET使用ipv4协议族 # socket.SOCK_STREAM使用tcp通讯 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 绑定端口和地址 addr = ("127.0.0.1", 8990) sock.bind(addr) # 监听接入访问的socket sock.listen() while True: # 接受访问的socket skt, addr = sock.accept() # 获得为bytes格式 msg = skt.recv(200) msg = msg.decode() rst = "收到消息:{}".format(msg) print(rst) # 发送反馈 msg = input("发送消息:") skt.send(msg.encode()) # 关闭链接通路 skt.close() if __name__ == '__main__': print("start Server") tcp_srv() print("end Server")
客户端代码:
[code]import socket def tcp_clt(): sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) addr = ("127.0.0.1", 8990) sock.connect(addr) # 发送内容到服务器 while True: msg = input("发送消息:") sock.send(msg.encode()) # 接受反馈 rst = sock.recv(200) print("收到消息"+rst.decode()) # 关闭链接通路 sock.close() if __name__ == '__main__': tcp_clt()
演示结果:
阅读更多
相关文章推荐
- [python] 专题七.网络编程之套接字Socket、TCP和UDP通信实例
- UDP,TCP的套接字编程的Python实现
- 【Python网络编程】利用Python进行TCP、UDP套接字编程
- Python网络编程之TCP与UDP协议套接字用法示例
- Python socket编程,tcp和udp
- TCP和UDP套接字编程基本流程
- UNIX环境高级编程学习之第十六章网络IPC:套接字 - 简单UDP Socket 通信
- Linux高级编程复习 第九章 信号量同步_socket网络编程基础_TCP_UDP
- python 网络编程-TCP/UDP
- python(12-2 网络编程 udp ,tcp 协议)
- Python3 TCP UDP 编程
- Linux C高级编程——网络编程之TCP(3)
- python socket(tcp/udp)编程
- Python 网络编程(套接字编程)
- TCP、UDP套接字编程(简单客户/服务器实现)
- Linux C高级编程——网络编程之UDP(4)
- TCP套接字与UDP套接字编程
- java socket, java套接字, java网络编程, java tcp, java udp
- java基础----->TCP和UDP套接字编程
- python 网络编程 TCP和UDP