• socket 编程


     1 什么是 Socket?
     2 Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯。
     3 
     4 socket()函数
     5 Python 中,我们用 socket()函数来创建套接字,语法格式如下:
     6 
     7 socket.socket([family[, type[, proto]]])
     8 参数
     9 family: 套接字家族可以使AF_UNIX或者AF_INET
    10 type: 套接字类型可以根据是面向连接的还是非连接分为SOCK_STREAM或SOCK_DGRAM
    11 protocol: 一般不填默认为0.
    12 
    13 
    14 
    15 import socket
    16 from datetime import datetime
    17 # 服务端
    18 sk=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    19 host=socket.gethostname() #获取主机名称
    20 port=9999
    21 # 绑定地址(host,port)到套接字, 在AF_INET下,以元组(host,port)的形式表示地址。
    22 sk.bind((host,port))
    23 # 开始TCP监听。backlog指定在拒绝连接之前,操作系统可以挂起的最大连接数量。该值至少为1,大部分应用程序设为5就可以了。
    24 sk.listen(5)
    25 while True:
    26     # 被动接受TCP客户端连接, (阻塞式) 等待连接的到来
    27     ck,addr=sk.accept()
    28     print('连接地址:%s'%str(addr),datetime.now())
    29     msg='欢迎访问菜鸟教程!'+'
    '
    30     # send() 发送TCP数据,将string中的数据发送到连接的套接字。返回值是要发送的字节数量,该数量可能小于string的字节大小。
    31     ck.send(msg.encode('utf-8'))
    32     ck.close()
    33 
    34 
    35 
    36 
    37 import socket
    38 import sys
    39 from datetime import datetime
    40 
    41 # 客户端
    42 s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    43 host=socket.gethostname()
    44 port=9999
    45 # 主动初始化TCP服务器连接。一般address的格式为元组(hostname,port),如果连接出错,返回socket.error错误。
    46 s.connect((host,port))
    47 # 接收TCP数据,数据以字符串形式返回,bufsize指定要接收的最大数据量。flag提供有关消息的其他信息,通常可以忽略。
    48 msg=s.recv(1024)
    49 s.close()
    50 print(msg.decode('utf-8'),datetime.now())
    51 
    52 
    53 
    54 
    55 
    56 
    57 import socket
    58 
    59 s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
    60 s.bind(('localhost',10021))
    61 print('UDP连接')
    62 while True:
    63     data,addr=s.recvfrom(1024)
    64     print('收到数据%s:%s.'%addr)
    65     s.sendto(data.decode('utf-8').upper().encode(),addr)
    66    
    67 
    68 
    69 import socket
    70 
    71 s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
    72 addr=('localhost',10021)
    73 while True:
    74     data=input('请输入要处理的数据:')
    75     if not data or data=='quit':
    76         break
    77     s.sendto(data.encode(),addr)
    78     recvdata,addr=s.recvfrom(1024)
    79     print(recvdata.decode('utf-8'))
    80 s.close()

  • 相关阅读:
    HDU-3555-Bomb
    hihoCoder-1015-KMP
    HDU-1251-统计难题
    hihoCoder-1014-Trie树
    BZOJ-4326: NOIP2015 运输计划 (二分+LCA+树上差分)
    BZOJ-1607: [Usaco2008 Dec]Patting Heads 轻拍牛头 (筛法暴力)
    BZOJ-1419: Red is good (期望DP)
    BZOJ-1798: [Ahoi2009]Seq 维护序列seq & BZOJ-5039: [Jsoi2014]序列维护 (线段树)
    BZOJ-3732: Network (kruskal+LCA)
    BZOJ-1787: [Ahoi2008]Meet 紧急集合 (LCA)
  • 原文地址:https://www.cnblogs.com/zpdbkshangshanluoshuo/p/10489998.html
Copyright © 2020-2023  润新知