Python(socket编程——2),,import soc


import socket‘‘‘socket.socket(socket_family,socket_type,protocal=0)socket_family 可以是 AF_UNIX 或 AF_INET。socket_type 可以是 SOCK_STREAM 或 SOCK_DGRAM。protocol 一般不填,默认值为 0。获取tcp/ip套接字tcpSock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)获取udp/ip套接字udpSock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)由于 socket 模块中有太多的属性。我们在这里破例使用了‘from module import *‘语句。使用 ‘from socket import *‘,我们就把 socket 模块里的所有属性都带到我们的命名空间里了,这样能 大幅减短我们的代码。例如tcpSock = socket(AF_INET, SOCK_STREAM)‘‘‘

七 基于TCP的套接字

tcp服务端

技术分享
1 ss = socket() #创建服务器套接字2 ss.bind()      #把地址绑定到套接字3 ss.listen()      #监听链接4 inf_loop:      #服务器无限循环5     cs = ss.accept() #接受客户端链接6     comm_loop:         #通讯循环7         cs.recv()/cs.send() #对话(接收与发送)8     cs.close()    #关闭客户端套接字9 ss.close()        #关闭服务器套接字(可选)
View Code

tcp客户端

技术分享
1 cs = socket()    # 创建客户套接字2 cs.connect()    # 尝试连接服务器3 comm_loop:        # 通讯循环4     cs.send()/cs.recv()    # 对话(发送/接收)5 cs.close()            # 关闭客户套接字
View Code

socket通信流程与打电话流程类似,我们就以打电话为例来实现一个low版的套接字通信

#_*_coding:utf-8_*_服务端__author__ = ‘Linhaifeng‘import socketip_port=(‘127.0.0.1‘,9000)  #电话卡BUFSIZE=1024                #收发消息的尺寸s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) #买手机s.bind(ip_port) #手机插卡s.listen(5)     #手机待机conn,addr=s.accept()            #手机接电话# print(conn)# print(addr)print(‘接到来自%s的电话‘ %addr[0])msg=conn.recv(BUFSIZE)             #听消息,听话print(msg,type(msg))conn.send(msg.upper())          #发消息,说话conn.close()                    #挂电话s.close()                       #手机关机
#_*_coding:utf-8_*_客户端__author__ = ‘Linhaifeng‘import socketip_port=(‘127.0.0.1‘,9000)BUFSIZE=1024s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)s.connect_ex(ip_port)           #拨电话s.send(‘linhaifeng nb‘.encode(‘utf-8‘))         #发消息,说话(只能发送字节类型)feedback=s.recv(BUFSIZE)                           #收消息,听话print(feedback.decode(‘utf-8‘))s.close()                                       #挂电话‘‘‘上述流程的问题是,服务端只能接受一次链接,然后就彻底关闭掉了,实际情况应该是,服务端不断接受链接,然后循环通信,通信完毕后只关闭链接,服务器能够继续接收下一次链接,下面是修改版‘‘‘
技术分享
#_*_coding:utf-8_*___author__ = ‘Linhaifeng‘import socketip_port=(‘127.0.0.1‘,8081)#电话卡BUFSIZE=1024s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) #买手机s.bind(ip_port) #手机插卡s.listen(5)     #手机待机while True:                         #新增接收链接循环,可以不停的接电话    conn,addr=s.accept()            #手机接电话    # print(conn)    # print(addr)    print(‘接到来自%s的电话‘ %addr[0])    while True:                         #新增通信循环,可以不断的通信,收发消息        msg=conn.recv(BUFSIZE)             #听消息,听话        # if len(msg) == 0:break        #如果不加,那么正在链接的客户端突然断开,recv便不再阻塞,死循环发生        print(msg,type(msg))        conn.send(msg.upper())          #发消息,说话    conn.close()                    #挂电话s.close()                       #手机关机服务端改进版
View Code
技术分享
#_*_coding:utf-8_*___author__ = ‘Linhaifeng‘import socketip_port=(‘127.0.0.1‘,8081)BUFSIZE=1024s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)s.connect_ex(ip_port)           #拨电话while True:                             #新增通信循环,客户端可以不断发收消息    msg=input(‘>>: ‘).strip()    if len(msg) == 0:continue    s.send(msg.encode(‘utf-8‘))         #发消息,说话(只能发送字节类型)    feedback=s.recv(BUFSIZE)                           #收消息,听话    print(feedback.decode(‘utf-8‘))s.close()                                       #挂电话客户端改进版
View Code

Python(socket编程——2)

评论关闭