• python_day26__socket网络编程基础编程知识


    server.py (server服务端):

    #Author:'haijing'
    #date:2018/10/30
    #服务端:在别人的哪里

    import socket #socket是一个接口 内部封装了有关ip地址和端口号的信息 并且创建ip和端口号

    #在socket类中family=AE_INET type=SOCK_STRAM;INET是在ipv4网络下的一个参数;
    # SOCK_STRAM是数据流建立tcp连接的数据
    #SOCK_Dgram 建立UDP连接的数据
    # family=AE_INET 服务器之间的通信
    # family=AE_UNIX Unix不同进程之间的通信
    sk = socket.socket() #创建一个socket对象sk 服务端的sk对象和客户端的sk对象完全是不一样的

    address = ('127.0.0.1',8000) #设置一个元组,元组内放的是ip和端口号
    #端口号都是自己任意添加,0-1024都是系统给我们设置的,能用的是1024之后的
    #以后用8000以后就好了

    sk.bind(address) #绑定ip和端口号,bind方法后跟的必须是一个元组

    sk.listen(3) #3表示服务端最多和三个客户端同时建立通信

    print('waiting...')
    conn,addr = sk.accept() #等待客户端来连接服务端 sk.accept是一个元组,里面有两个内容,分别用conn和addr来盛
    #conn拿到的是某一个客户端的socket对象,addr是建立连接的client.py的ip地址和端口号等信息
    # print(conn)#(<socket.socket fd=504, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 8000), raddr=('127.0.0.1', 52686)>, ('127.0.0.1', 52686))
    #conn中封装了建立的socket信息

    #接下就是进行服务端和客户端之间进行通信
    #客户端先发送第一条消息
    # server下的方法:bind() listen() accept() recv()收 send()发的是一个字节 sendall()发,一次发不干净多次发
    #client下的方法:connect()

    #只要建立好连接之后,谁先发送都没有问题,关键是要一发一收 *****
    #server端发
    inp = input('>>>') #从键盘上输入一个数据
    inp_server = bytes(inp,'utf8') #字符转换,在python3中传送的值一定是bytes类型,在python2中没有此问题
    conn.send(inp_server) #第33行 对应client.py下第十一行的接收函数data=sk.recv()

    #server端收
    data = conn.recv(1024) #sk是server端自己的sk,真正与客户端进行通信的对象是conn这个对象
    #而且不可能只有一个客户端,所以手法数据都是通过conn找到对应的客户端进行通信的
    #sk只是用于进行服务端和客户端之间进行连接用的
    data = str(data,'utf8') #将bytes类型转换为字符串类型,同时支持汉字
    print(data)


    client.py(client客户端):
    #Author:'haijing'
    #date:2018/10/30
    #客户端:在自己的电脑上 不需要去绑定 直接去连接

    import socket
    sk = socket.socket() #创建socket对象 服务端的sk对象和客户端的sk对象完全是不一样的

    address = ('127.0.0.1',8000) #设置元组 里面放的是需要连接的服务器的ip地址
    sk.connect(address) #连接ip地址为127.0.0.1的服务端

    #client端收
    data = sk.recv(1024) #11行,一次最多收1024k 对应server.py下第33行的发送函数:conn,send('hello') 如果服务端不给发数据,那么就一直停在这里
    data = str(data,'utf8') #将bytes类型转换为字符串类型,同时支持汉字
    print(data)

    #client端发
    inp_client = input('>>>')
    inp_client = bytes(inp_client,'utf8')
    sk.send(inp_client)

    sk.close #关的此客户端是和服务端之间的通信通道,同样server端也是有关掉通信通道的能力,但是server端一般是不会关的

    接下来是这两部分py文件的执行图片:
    server端:


    client端:


    原理图:


    haijing in HZ 最近压力好大,要去猜测别人的想法 真的是很累 而且明明已经很尽力的去做事了,为什么还是被别人给插了一刀
    2018.11.1 不过今天傍晚的云彩倒还是挺漂亮的,附上图的吧还是,希望某人也可以看得到













  • 相关阅读:
    最常用的开源游戏引擎
    3D图形数学(3D Graphics Math)
    中国航运网遭遇挂马 黑客悄悄植入病毒 狼人:
    Windows 7 RC今日开放下载 服务器或不堪重负 狼人:
    周杰伦等名人网站频被挂马 粉丝上网需警惕 狼人:
    Adobe新漏洞 金山清理专家急推专补工具 狼人:
    Twitter安全问题接连不断 黑客再次入侵 狼人:
    趋势科技收购加拿大安全公司Third Brigade 狼人:
    金山携手PICC探索杀毒软件服务全新模式 狼人:
    “假冒hao123”“北大青鸟”被黑 钓鱼挂马两不误 狼人:
  • 原文地址:https://www.cnblogs.com/YiYA-blog/p/9892967.html
Copyright © 2020-2023  润新知