您的位置:首页 > 理论基础 > 计算机网络

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

演示结果:

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: