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!
  • 相关阅读:
    PAT (Advanced Level) 1060. Are They Equal (25)
    PAT (Advanced Level) 1059. Prime Factors (25)
    PAT (Advanced Level) 1058. A+B in Hogwarts (20)
    PAT (Advanced Level) 1057. Stack (30)
    PAT (Advanced Level) 1056. Mice and Rice (25)
    PAT (Advanced Level) 1055. The World's Richest (25)
    PAT (Advanced Level) 1054. The Dominant Color (20)
    PAT (Advanced Level) 1053. Path of Equal Weight (30)
    PAT (Advanced Level) 1052. Linked List Sorting (25)
    PAT (Advanced Level) 1051. Pop Sequence (25)
  • 原文地址:https://www.cnblogs.com/andr01la/p/5158918.html
Copyright © 2011-2022 走看看