• 网络编程:socket--python核心编程(3),chapter 1


        最近两天把第一部分的网络编程socket好好学习了一番,收获也蛮多的。。。

        套接字:能使运行在不同或相同计算机上运行的进行通信;套接字一种是基于文件的(同一台计算机进程间通信),另一种是基于网络的(同一台或不同计算机进程通信),经常使用的是AF_INET

        套接字又分:无连接的 和 面向连接的;面向连接的套接字,也就是我们常说的tcp连接;无连接的套接字,就是udp;因为基于网络的所以就要通过ip协议来进行传输,所以下面是通过socket来创建udp和tcp连接:

        tcp:tcptest = socket.socket(AF_INET,SOCK_STREAM)    tcp:流套接字,SOCK_STREAM

       udp: udptest = socket.socket(AF_INET,SOCK_DGRAM)    udp:数据报(datagram),SOCK_DGRAM

        下面将分别使用tcp和udp进行传输,包括服务端和客户端(本次测试:服务端和客户端都是在本机)

        1、tcp创建服务器和客户端,常用的方法:s.bind()、s.listen()、s.accept()、s.connect()、s.recv()、s.send()

      s.bind():将地址和端口绑定到套接字上;s.listen():设置并启动监听器;s.accept():接收tcp客户端连接

      s.connect():tcp客户端连接服务器;s.recv():接收tcp消息;s.send():发送tcp消息

      a:TCP服务器:TcpServer.py

     1 #coding=utf-8
     2 
     3 """
     4 author : xiaoshitou
     5 date   : 2016-08-08
     6 """
     7 from socket import *
     8 from time import ctime
     9 
    10 host = '127.0.0.1'
    11 port = 2000
    12 bufsiz = 1024
    13 addr = (host, port)
    14 
    15 tcpServer = socket(AF_INET, SOCK_STREAM)
    16 tcpServer.bind(addr)
    17 tcpServer.listen(5)
    18 
    19 while True:
    20     print 'TCP...waiting for connection...'
    21     tcpClientSock, addr = tcpServer.accept()
    22     print 'TCP...connected from: {0}'.format(addr,)
    23 
    24     while True:
    25         data = tcpClientSock.recv(bufsiz)
    26         if not data:
    27             break
    28         tcpClientSock.send('TCP: {0}: {1}'.format(ctime(), data))
    29 
    30     tcpClientSock.close()
    31 tcpServer.close()

        b:TcpClient.py

     1 #coding=utf-8
     2 
     3 """
     4 author : xiaoshitou
     5 date   : 2016-08-09
     6 """
     7 from socket import *
     8 
     9 host = '127.0.0.1'
    10 port = 2000
    11 bufsiz = 1024
    12 addr = (host, port)
    13 
    14 tcpclient = socket(AF_INET,SOCK_STREAM)
    15 tcpclient.connect(addr)
    16 
    17 while True:
    18     data = raw_input('> ')
    19     if not data:
    20         break 
    21     tcpclient.send(data)
    22     data = tcpclient.recv(bufsiz)
    23     if not data:
    24         break 
    25     print data
    26 
    27 tcpclient.close()

        执行结果:

        2、udp创建服务器和客户端,常用方法:s.recvfrom():接收udp消息;s.sendto():发送udp消息

        a、UdpServer.py

     1 #coding=utf-8
     2 
     3 """
     4 author : xiaoshitou
     5 date   : 2016-08-09
     6 """
     7 from socket import *
     8 from time import ctime
     9 
    10 host = '127.0.0.1'
    11 port = 2000
    12 bufsiz = 1024
    13 addr = (host, port)
    14 
    15 udpserver = socket(AF_INET, SOCK_DGRAM)
    16 udpserver.bind(addr)
    17 
    18 while True:
    19     print 'UDP...waiting for message...'
    20     data, addr = udpserver.recvfrom(bufsiz)
    21     udpserver.sendto('UDP: {0}: {1}'.format(ctime(), data), addr)
    22     print 'UDP...received from and returned to: {0}'.format(addr,)
    23 
    24 udpserver.close()

        b、UdpClient.py

     1 #coding=utf-8
     2 
     3 """
     4 author : xiaoshitou
     5 date   : 2016-08-09
     6 """
     7 from socket import *
     8 from time import ctime
     9 
    10 host = '127.0.0.1'
    11 port = 2000
    12 bufsiz = 1024
    13 addr = (host, port)
    14 
    15 udpclient = socket(AF_INET,SOCK_DGRAM)
    16 
    17 while True:
    18     data = raw_input('> ')
    19     if not data:
    20         break 
    21     udpclient.sendto(data, addr)
    22     data, addr = udpclient.recvfrom(bufsiz)
    23     if not data:
    24         break 
    25     print data
    26 
    27 udpclient.close()

        udp服务端和客户端执行结果:

  • 相关阅读:
    Codeforces Round #562 (Div. 2) B. Pairs
    Codeforces Round #562 (Div. 2) A.Circle Metro
    K.河北美食
    H.天神的密码
    国标GB28181协议智能分析告警平台EasyGBS及EasyCVR监控系统内iframe的常见问题说明
    【解决方案】国标GB28181平台EasyGBS级联EasyCVR视频智能分析搭建“蓝天卫士”网络视频监控系统技术方案
    【解决方案】基于国标GB28181协议/HIKSDK/Ehome协议EasyCVR智能融合分析平台在智慧校园人脸识别中的应用
    TSINGSEE青犀视频基于开源Webrtc服务器编译mediasoupClient运行报”SignalEncoderTimeOut, Encoder timed out”
    TSINGSEE青犀视频云边端H265播放器EasyPlayer-RTSP在C#版本增加OSD功能说明
    TSINGSEE青犀视频自主研发的H265播放器被集成后无法播放视频是什么原因?
  • 原文地址:https://www.cnblogs.com/xiaoshitoutest/p/5754801.html
Copyright © 2020-2023  润新知