Python网络编程——面向连接(TCP)和无连接(UDP)时间戳网络小程序

网络编程——基于TCP的网络应用程序

服务器

步骤备注
创建socket对象关键字:AF_INET, SOCK_STREAM,其中,AF_INTE代表地址家族:因特网、SOCK_STREAM是socket模块中用来声明TCP套接字的关键字
绑定地址(HOST,PORT)
设置监听(listen)设置的监听数,连接被转接或拒绝前传入连接请求的最大数
设置一个无限循环的监听程序
关闭连接
"""
时间戳服务器
"""
from socket import *
from time import ctime

HOST = ''
PORT = 21567
BUFSIZE = 1024
ADDR = (HOST, PORT)

# 实例化sock对象
tcpServerSock = socket(AF_INET, SOCK_STREAM)
# 绑定地址
tcpServerSock.bind(ADDR)
# 设置最大监听数
tcpServerSock.listen(5)

while True:
    print("waiting for connection.....")
    # 接收连接信息
    tcpCliSock, addr = tcpServerSock.accept()
    print("...connected from:", addr)

    while True:
        # 接收TCP消息
        data = tcpCliSock.recv(BUFSIZE)
        if not data:
            break
        # 编码信息
        message = '[{0}]{1}'.format(ctime(), data.decode('utf-8')).encode('utf-8')
        tcpCliSock.send(message)
    tcpCliSock.close()
tcpServerSock.close()

客户端

步骤备注
创建socket对象同上
连接服务器(connect)
关闭连接
"""
时间戳客户端
"""
from socket import *

HOST = '127.0.0.1'
PORT = 21567
BUFSIZ = 1024
ADDR = (HOST, PORT)

# 实例化sock对象
tcpCliSock = socket(AF_INET, SOCK_STREAM)
# 连接服务器
tcpCliSock.connect(ADDR)

while True:
    data = input('>')
    if not data:
        break
    tcpCliSock.send(data.encode('utf-8'))
    data_recv = tcpCliSock.recv(BUFSIZ)
    print(data_recv.decode('utf-8'))

注意事项:

  1. 传递消息的转换,网络之间的数据是bytes,所以在传递的时候要进行编码(string.encode(‘utf8’))
    服务器端和客户端在接收消息的时候要进行解码(string.decode(“utf8”));

  2. TCP网络应用程序是基于连接的;

  3. 服务器要先于客户端启动。(否则客户端程序无发连接到服务器)

网络编程——基于UDP的网络应用程序

服务器

步骤备注
创建socket对象AF_INET、SOCK_DGRAM
绑定地址(HOST,PORT)
设置一个无限循环的监听程序
关闭连接
from socket import *
from time import ctime

HOST = ''
PORT = 21567
BUFSIZ = 1024
ADDR = (HOST, PORT)

udpSerSocket = socket(AF_INET, SOCK_DGRAM)
udpSerSocket.bind(ADDR)

try:
    while True:
        print("waiting for connection ...")
        data, addr = udpSerSocket.recvfrom(BUFSIZ)
        message = '[{0}]{1}'.format(ctime(), data.decode('utf-8')).encode('utf-8')
        udpSerSocket.sendto(message, addr)
        print("connected from and returned to", addr)
    udpSerSocket.close()
except EOFError and KeyboardInterrupt as ex:
    raise ex

客户端

步骤备注
创建socket对象
连接服务器(connect)
关闭连接
from socket import *

HOST = 'localhost'
PORT = 21567
BUFSIZ = 1024
ADDR = (HOST, PORT)

udpCliSock = socket(AF_INET, SOCK_DGRAM)
try:
    while True:
        data = input(">")
        if not data:
            break
        udpCliSock.sendto(data.encode('utf-8'), ADDR)
        data, ADDR = udpCliSock.recvfrom(BUFSIZ)
        if not data:
            break
        print(data.decode('utf-8'))
    udpCliSock.close()
except EOFError and KeyboardInterrupt as ex:
    raise ex

注意事项:

  1. 传递消息的转换,网络之间传递的数据是bytes,所以在传递的时候要进行编码(string.encode(‘utf8’))
    服务器端和客户端在接收消息的时候要进行解码(string.decode(“utf8”));
  2. UDP网络应用程序是基于无连接套接字的,客户端在发送请求之前,不需要提前连接服务器;
  3. 服务器和客户端的启动,没有特定的要求

这只是基础的网络编程帮助了解网络编程的基本原理,真正要实现一个基于UDP\TCP的网络应用程序还是比较困难和复杂的

一般开发网络应用程序比较Twisted框架,此框架很强大,包括网络协议、线程、安全性和身份验证、连天\IM、DBM\RDBMS数据库继承电子邮件、GUI集成工具包哦等等,这需要读者自己去学习和发现了~下边给一个介绍Twisted的工具
给一个介绍的连接 Twisted介绍——作者:宇宙浪子

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值