socket初识

socket初识
SOCK_STREAM :TCP
SOCK_dgram :UDP
family=AF_INET: 服务器之间的通信 ipv4
family=AF_UNIX: Unix不同进程间通信 ipv6
协议里面一共有65535个端口
一般情况下1024中的端口号都被操作系统占用
client:sk
<socket.socket fd=464, family=AddressFamily.AF_INET,
type=SocketKind.SOCK_STREAM, proto=0>
server:
(<socket.socket fd=484, family=AddressFamily.AF_INET,
type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1',
8000),raddr=('127.0.0.1', 52858)>, ('127.0.0.1', 52858))
注意:两个sk无任何关系
server下的方法
    bind()
    listen()
    accept()

    recv()
    send(String)
    sendall()
    close() 注:一般情况下服务端是不会关闭通道的
    #author: wylkjj
    #date:2019/4/16
    #服务端
    import socket
    #参数family type(流)
    sk=socket.socket()
    print(sk)
    address=('127.0.0.1',8000)#IP地址与端口
    sk.bind(address)#绑定IP地址和端口
    sk.listen(3)#最大等待量
    print('waiting')
    # conn=sk.accept()#Accept阻塞,等待连接
    conn,addr=sk.accept()#单独变量接收IP地址和端口
    # print(conn)
    # (<socket.socket fd=484, family=AddressFamily.AF_INET,
    # type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1',
    # 8000),raddr=('127.0.0.1', 52858)>, ('127.0.0.1', 52858))
    inp=input('>>>')
    conn.send(bytes(inp,'utf8'))
client下的方法
    connect()
    recv()
    send(String)
    sendall() #注:在python3.以上中传送的内容一定是bytes类型,但python2.7中不做类型区分
    close()#关闭通道
注:一收一发,不能同时发同时收
    #author: wylkjj
    #date:2019/4/16
    #客户端
    import socket
    sk=socket.socket()
    address=('127.0.0.1',8000)#回环地址(一个特殊地址,可以代指本机地址)
    sk.connect(address)
    data=sk.recv(1024)#阻塞,等待回复,接收操作,1024接受数据量
    # data=sk.send(bytes('hshs','utf8'))
    print(str(data,'utf8'))
    sk.close()#关闭通道
实例:
    #author: wylkjj
    #date:2019/4/16
    #客户端
    import socket
    sk=socket.socket()
    address=('127.0.0.1',8000)
    sk.connect(address)
    inp = input('>>>')
    sk.send(bytes(inp,'utf8'))
    data=sk.recv(1024)#接收数据
    print(str(data,'utf8'))
    sk.close()

    #author: wylkjj
    #date:2019/4/16
    #服务端
    import socket
    #参数family type(流)
    sk=socket.socket()
    print(sk)
    address=('127.0.0.1',8000)#IP地址与端口
    sk.bind(address)#绑定IP地址和端口
    sk.listen(3)#最大等待量
    print('waiting')
    conn,addr=sk.accept()#单独变量接收IP地址和端口
    data=conn.recv(1024)
    print(str(data,'utf8'))
    inp=input('>>>')
    conn.send(bytes(inp,'utf8'))
完整实例:
    #author: wylkjj
    #date:2019/4/16
    #服务端
    import socket
    #参数family type(流)
    sk=socket.socket()
    address=('127.0.0.1',8000)#IP地址与端口
    sk.bind(address)#绑定IP地址和端口
    sk.listen(3)#最大等待量
    print('waiting')
    # conn,addr=sk.accept()#单独变量接收IP地址和端口
    while 1:
        conn,addr=sk.accept()
        print(addr)
        while 1:
            data=conn.recv(1024)
            print('......'+str(data, 'utf8'))
            if not data:break
            inp=input('>>>')
            conn.send(bytes(inp,'utf8'))
    sk.close()

    #author: wylkjj
    #date:2019/4/16
    #客户端
    import socket
    sk=socket.socket()
    address=('127.0.0.1',8000)
    sk.connect(address)
    while True:
        inp = input('>>>')
        if inp=='exit':
            break
        sk.send(bytes(inp,'utf8'))
        data=sk.recv(1024)#接收数据
        print(str(data,'utf8'))
    sk.close()
    #注:不能发空内容
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值