zoukankan      html  css  js  c++  java
  • python模块—socket

    创建套接字:

    socket.socket(family,type[,protocal])

    使用给定的地址族、套接字类型、协议编号(默认为0)来创建套接字。

    1. socket类型:

    socket.AF_UNIX:只能够用于单一的Unix系统进程间通信

    socket.AF_INET:服务器之间网络通信

    socket.AF_INET6:IPv6

    socket.SOCK_STREAM:流式socket,for TCP

    socket.SOCK_DGRAM:数据报式socket,for UDP

    socket.RAW:原始套接字。利用原始套接字:

    • 可以处理普通的套接字无法处理的ICMP、IGMP等网络报文;
    • 可以处理特殊的IPv4报文;
    • 可以通过IP_HDRINCL套接字选项由用户构造IP头

    socket.SOCK_SEQPACKET:可靠的连续数据包服务

    例如:

    创建TCP socket: s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)

    创建UDP socket: s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

    2. socket函数

    服务器函数:

    s.bind(address):将套接字绑定到地址,在AF_INET下,以元祖(host,port)的形式表现地址

    s.listen(backlog):开始监听TCP连接。backlog指定在拒绝连接之前,操作系统可以挂起的最大连接数。至少为1

    s.accept():接收TCP连接并返回(conn,address),其中conn是新的套接字对象,可以用来接收和发生数据。address是连接客户端的地址。

    客户端函数:

    s.connect(address):连接到address处的套接字。一般address的格式为元组(hostname,port),如果连接出错,返回socket.error错误

    s.connect_ex(address):功能与connect(address)相同,但是成功返回0,失败返回errno的值

    公共函数:

    s.recv(bufsize[,flag]):接收TCP套接字的数据。数据以字符串形式返回,bufsize指定要接收的最大数据量。flag提供有关消息的其他消息,常忽略

    s.send(string[,flag]):发送TCP数据。将string中的数据发送到连接的套接字。返回值是要发送的字节数量,该数量可能小于string的字节大小

    s.sendall(string[,flag]):完整发送TCP数据。将string中的数据发送到连接的套接字,但在返回之前会尝试发送所有数据。成功返回None,失败则抛出异常

    s.recvfrom(bufsize[,flag]):接收UDP套接字的数据。与recv()类似,但返回值是(data,address)。其中data是包含接收数据的字符串,address是发送数据的套接字地址

    s.sendto(string[,flag],adress):发送UDP数据。将数据发送到套接字,address是形式为(ipaddr,port)的元组,指定远程地址。返回值是发送的字节数

    s.close():关闭套接字

    3. 实例

    Server:

     1 #-*- coding: UTF-8 -*-
     2 
     3 __author__ = '007'
     4 __date__ = '2016/1/27'   
     5 
     6 import socket
     7 
     8 HOST,PORT = '',8888
     9 
    10 
    11 s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    12 #s.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
    13 s.bind((HOST,PORT))
    14 s.listen(1)
    15 print "Serving HTTP on host %s..." % HOST
    16 print "Serving HTTP on port %s..." % PORT
    17 
    18 while True:
    19     client_conn,client_addr = s.accept()
    20     request = client_conn.recv(1024)
    21     print request
    22     http_response = """
    23 HTTP/1.1 200 OK
    24 
    25 Hello C!
    26 """
    27     print client_conn.sendall(http_response)
    28 
    29     client_conn.close()

    运行:

    E:\Py\testing>python module/sock-s.py
    Serving HTTP on host ...
    Serving HTTP on port 8888..

    WEB浏览器:

      TCP连接成功,正常会话!

    telnet会话:

    telnet 127.0.0.1 8888

    Client:

     1 #-*- coding: UTF-8 -*-
     2 
     3 __author__ = '007'
     4 __date__ = '2016/1/27'
     5 
     6 import socket
     7 
     8 s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
     9 
    10 s.connect(("127.0.0.1",8888))
    11 s.send("Hello S")
    12 print s.recv(1024)
    13 
    14 s.close()

     运行:

    E:\Py\testing>python module/sock-c.py
    
    HTTP/1.1 200 OK
    
    Hello C!
  • 相关阅读:
    c++ vs2019中编写nasm
    CF1242 A. Tile Painting题解(gcd)
    康托展开与逆康托展开
    CF 1459B Move and Turn 题解(思维)
    杨辉三角小性质
    CF 1028C Rectangles 题解(思维)
    Educational Codeforces Round 107 题解(A-E)
    HDU 5649 DZY Love Sorting 题解(二分套线段树)
    CF1336D Two Divisors 题解(gcd性质)
    题解 BZOJ1233 【[Usaco2009Open]干草堆tower】
  • 原文地址:https://www.cnblogs.com/andr01la/p/5158918.html
Copyright © 2011-2022 走看看