socket套接字编程

本博客转载自

https://www.jianshu.com/p/29ced38b5183?utm_campaign=haruki&utm_content=note&utm_medium=reader_share&utm_source=qq

socket网络编程接口

  • 基本概念
    可以这样来理解socket,完成一段网络通信需要五个元素,协议族,协议类型,协议,目标ip地址,目标端口号,这是由TCP/IP网络结构决定的。socket作为一种数据结构,将以上五个信息组合起来,称为套接字。根据面向连接与非连接,套接字类型分为Datagram与Stream两种类型。Datagram套接字使用UDP协议,向目标地址发送数据包,不保证可靠送达,Stream使用TCP协议,是可靠的、具有差错与流量控制的传输协议,也就是说,stream类型的套接字传输信息,具有较好的可靠性,而Datagram类型的套接字具有更高的实时性。
  • 初始化流式套接字的步骤
    • 服务端
      • 使用socket函数创建套接字
      • 绑定到指定的ip地址
      • 监听客户端连接
      • 获取客户端连接后,使用返回的套接字收发数据
      • 通信结束,关闭套接字
    • 客户端
      • 创建套接字
      • 连接指定ip地址
      • 连接成功后收发数据
      • 关闭套接字
    • 常用套接字函数

       

       

    • 例程
      • 时间戳服务器
                   #!/usr/bin/env python
         import socket
         from time import ctime
         
         
         host='127.0.0.1'
         port=8000
         bufsize=1024
         addr=(host, port)
         
         sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
         sock.bind(addr)
         sock.listen(5)
         while True:
             print 'waiting for connection...'
             clisock, cliaddr = sock.accept()
             print 'connected from', cliaddr
             print 'peername:', clisock.getpeername()
             data = clisock.recv(bufsize)
             if not data:
                 break
             clisock.send('[%s] %s' % (ctime(), data))
             clisock.close()
         sock.close()
        
      • 客户端
         #!/usr/bin/env python
         from time import ctime
         import socket
         
         host='127.0.0.1'
         port=8000
         addr=(host, port)
         bufsize=1024
         
         
         while True:
             sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
             sock.connect(addr)
             data = raw_input(u'>')
             if not data:
                 break
             sock.send(data)
             data = sock.recv(bufsize)
             print data
                    #!/usr/bin/env python
         from time import ctime
         import socket
         
         host='127.0.0.1'
         port=8000
         addr=(host, port)
         bufsize=1024
         
         
         while True:
             sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
             sock.connect(addr)
             data = raw_input(u'>')
             if not data:
                 break
             sock.send(data)
             data = sock.recv(bufsize)
             print data
         
             sock.close()
             sock.close()

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值