socket创建udp传输

作者: _String_ | 来源:发表于2017-05-18 09:05 被阅读0次

    socket网络编程那篇文章说过,udp是面向无连接的,使用数据报,socket type使用sock_DGRAME,由于面向无连接因此涉及到的设置较少,主要代码如下:
    ss = socket() #创建服务器套接字
    ss.bind() #帮定监听地址
    inf_loop: #服务器无限循环
    cs = ss.recvrom() or ss.sendto() #接收/发送数据
    ss.close() #关闭套接字

    具体实现代码如下:

    !/usr/bin/env python

    from socket import *
    from time import ctime

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

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

    while True:
    print 'waiting for message...'
    data, addr = udpSerSock.recvfrom(BUFSIZE)
    udpSerSock.sendto('time is %s you input string===>%s' % (ctime(), data))
    print 'shou dao client falai de neirong wei:%s' % addr
    udpSerSock.close()

    udp客户创建较简单主要代码如下:
    cs = sockte() #创建套接字
    comm_loop: #通信循环
    cs.sendto()/cs.recvfrom() #发送数据/接收数据
    cs.close() #关闭连接
    详细代码如下:

    !/usr/bin/python

    from socket import *

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

    udpCliSock = socket(AF_INET, SOCK_DGRAM)

    while True:
    data = raw_input('please input==>')
    if not data:
    break
    print '-'30
    udpCliSock.sendto(data, ADDR)
    print '-'
    10
    data, addr = udpCliSock.recvfrom(BUFSIZE)
    print '-'*30
    print data, addr
    if not data:
    break
    print data, addr
    print dataudpclisock.close()
    udpCliSock.close()

    socket模块除了socket()函数之外还有其他几个常用的函数。
    socket模块属性:
    数据属性:AF_unix,AF_INET,AF_INET6 python支持的套接字地址家族
    SO——STREAM,SO_DGRAM 套接字类型 tcp=STREAM,udp=DGRAM
    has_ipv6 是否支持IPv6标志。
    异常 error 套接字相关错误,herror 主机和地址相关错误,gaierr 地址相关错误
    timeout 超时
    函数:socket指定的地址家族,套接字类型和协议类型创建一个套接字对象。
    socketpar 用指定的家族、套接字类型和协议创建一对套接字对象。
    fromfd()用一个已经代开的文件描述符创建一个套接字对象
    ssl()在套接字基础上发起一个安全套接字成曾层ssl不做证书验证
    getaddrinfo 得到地址信息
    getfqdn()返回完整的域名
    gethostname()得到当前主机的名字
    gethostbyname()由主机名字得到对应的IP
    gethostbyname_ex()gethostbyname的扩展返回主机所有别名和IP

    内置模块socketServer
    模块调用示例代码如下:

    !/usr/bin/env python

    from SocketServer import (TCPServer as TCP, StreamRequestHandler as SRH)
    from time import ctime

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

    class MyRequestHandler(SRH):
    """docstring for MyRequestHandler"""
    #def init(self, arg):
    # super(MyRequestHandler, self).init()
    # self.arg = arg
    def handle(self):
    print '....connected from:', self.client_address
    self.wfile.write('%s %s' % (ctime(), self.rfile.readline()
    tcpServer = TCP(ADDR,MyRequestHandler)
    print 'WATING FOR CONNECTION...'
    TCPServer.serve_forever()
    客户端有数据传输时调用handle函数,StreamRequestHandler类支持像操作文件对象那样操作输入输出套接字,使用readline()函数获取客户端消息,使用write(把字符窜发送给客户端),为了保持一致性,我们重用了在客户端传过来的回车与换行符,其他代码与服务器是一样的。
    使用之前方法编写客户端代码进行连接即可。

    相关文章

      网友评论

        本文标题:socket创建udp传输

        本文链接:https://www.haomeiwen.com/subject/wdjjxxtx.html