python高级语法-套接字编程之UDP和TCP编程

  • 存在两类协议UDPTCP协议,前者是不安全的不面向链接的传输,速度快,后者是安全的面向链接的传输,速度慢。
  • 首先,必须明确服务器和客户端的区别
    • 在服务器端连接ip地址和端口唯一指定这个程序,接受访问,给与反馈,优秀的服务器永远不会停止运行。
    • 在客户端访问服务器,发送消息,给与反馈。
  • 所有都要求先有服务器开启才能客户端连接。
  • 下面主要演示两种编程实现简单的聊天
  • UDP示例代码:
    • 服务器端代码
    • 客户端代码
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("发送消息:")# 发送数据编码成为bytedata = rsp.encode()sock.sendto(data, addr)
if __name__ == '__main__':print("start  Server")serverFunc()print("end  Server")

 

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示例代码
    • 服务器端代码
    • 客户端代码
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)# 监听接入访问的socketsock.listen()while True:# 接受访问的socketskt, 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")

 

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()

 


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部