Python socket模块

socket 也称套接字,用于描述IP地址和端口,是一个通信链的句柄,应用程序通过“套接字”向网络发出请求或者应答网络请求

简单使用

# server 端

import socket

# 创建socket对象
sk = socket.socket()

# 绑定端口和IP
ip_port = ('127.0.0.1', 9999)
sk.bind(ip_port)

sk.listen(5)

# 处理完一个请求后,会处理下一个,持续监听。
while True:
    # 建立监听, sk.accept() 返回值为一个元祖,conn的值为客户端的socket对象,address为客户端连接过来的地址。
    conn, address = sk.accept()
    print conn  #结果==》<socket._socketobject object at 0x1066330c0>

    # 当客户端连接上之后,向客户端发送数据
    conn.send('hello')
    
    # 定义标志位,用来跳出循环
    flag = True
    
    # 该循环用于和一个用户的持续连接
    while flag:
        # 接收客户端的数据
        data = conn.recv(1024)
        print data
        if data == 'exit':
            flag = False
        # 向客户端发送数据
        conn.send('sb')

    conn.close()
# client 端

import socket

client = socket.socket()

# 建立连接
ip_port = ('127.0.0.1', 9999)
client.connect(ip_port)

while True:
    # 接受服务端发过来的数据
    data = client.recv(1024)
    print data

    # 向服务端发送数据
    inp = raw_input('client: ')
    client.send(inp)
    if inp == 'exit':
        break

socket 参数

# 实例化时,不加参数,默认是如下参数
sk = socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0)
# 参数一: 地址簇
socket.AF_INET :服务器之间网络通信,用于ipv4(默认)
socket.AF_UNIX :只能够用于单一的unix系统进程间通信,不能进行网络通信
socket.AF_INET6 :IPV6

# 参数二: 类型
socket.SOCK_STREAM 流式socket,for TCP(默认)
socket.SOCK_DGRAM 数据报式socket,for UDP
socket.SOCK_RAW 原始套接字,普通的套接字无法处理ICMP、IGMP等网络报文,而SOCK_RAW可以。其次SOCK_RAW也可以处理特殊的IPv4报文;使用原始套接字,可以通过IP_HDRINCL套接字选项由用户构造IP头
socket.SOCK_RDM 一种课改的UDP形式,保证数据但不保证顺序,很少用
socket.SOCK_SEQPACKET 可靠的连续数据包服务,很少用

# 参数三: 协议
0 (默认),于特定的地址家族相关的协议,如果是0,则系统会根据地址格式和套接类别自动选择一个合适的协议

socket 方法

sk.bind(address):
  s.bind(address) 将套接字绑定到地址。address地址的格式取决于地址族。在AF_INET下,以元组(host,port)的形式表示地址。


sk.listen(backlog):
  开始监听传入连接。backlog指定在拒绝连接之前,可以挂起的最大连接数量。backlog等于5,
  表示内核已经接到了连接请求,但服务器还没有调用accept进行处理的连接个数最大为5,
  这个值不能无限大,因为要在内核中维护连接队列


sk.setblocking(bool):
  是否阻塞(默认True),如果设置False,那么accept和recv时一旦无数据,则报错。


sk.accept():
  接受连接并返回(conn,address),其中conn是新的套接字对象,可以用来接收和发送数据。address是连接客户端的地址。
  接收TCP 客户的连接(阻塞式)等待连接的到来


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


sk.connect_ex(address)
  同上,只不过会有返回值,连接成功时返回 0 ,连接失败时候返回编码,例如:10061


sk.close():
  关闭套接字


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


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


sk.send(string[,flag]):
  将string中的数据发送到连接的套接字。返回值是要发送的字节数量,该数量可能小于string的字节大小。即:可能未将指定内容全部发送。


sk.sendall(string[,flag]):
  将string中的数据发送到连接的套接字,但在返回之前会尝试发送所有数据。成功返回None,失败则抛出异常。
    内部通过递归调用send,将所有内容发送出去。


sk.sendto(string[,flag],address):
  将数据发送到套接字,address是形式为(ipaddr,port)的元组,指定远程地址。返回值是发送的字节数。该函数主要用于UDP协议。


sk.settimeout(timeout):
  设置套接字操作的超时期,timeout是一个浮点数,单位是秒。值为None表示没有超时期。一般,超时期应该在刚创建套接字时设置,因为它们可能用于连接的操作(如 client 连接最多等待5s )


sk.getpeername():
  返回连接套接字的远程地址。返回值通常是元组(ipaddr,port)。


sk.getsockname():
  返回套接字自己的地址。通常是一个元组(ipaddr,port)
  
  
sk.fileno(): 
  套接字的文件描述符
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,884评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,755评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,369评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,799评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,910评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,096评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,159评论 3 411
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,917评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,360评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,673评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,814评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,509评论 4 334
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,156评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,882评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,123评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,641评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,728评论 2 351

推荐阅读更多精彩内容

  • 1.1 TCP/IP协议组 TCP/IP协议(传输控制协议)由网络层的IP协议和传输层的TCP协议组成 IP层负责...
    F麦子阅读 2,784评论 0 25
  • 第一部分、概念的理解1、什么是Socket?Socket又称之为“套接字”,是系统提供的用于网络通信的方法。它的实...
    Hevin_Chen阅读 2,446评论 0 5
  • 被相亲,被催婚已经是司空见惯的事,但是,如果你自己都不为自己努力坚持,莫名其妙就被不相干的人洗脑灌输一种名为“再拖...
    本本环绕阅读 382评论 1 2
  • 书畔茶余每作邻,清光独忆自凝神。 一朝金榜同欢笑,十载寒窗证苦辛。 入夜能祛心上暗,逢秋堪暖旅中身。 今宵把酒与君...
    君怀璧阅读 2,440评论 22 74
  • 过完2017年的春节后,我就27岁了。我觉得自己有点老了,不知道为什么今年这种感觉尤为强烈。真不知道以前的那些岁月...
    yoki999阅读 180评论 1 1