zoukankan      html  css  js  c++  java
  • Socket网络编程实例2

    两个程序通过“网络”交互数据就使用socket,它只负责两件事:建立连接,传递数据。

    所有的数据传输接收,必须都使用byte格式

    1.简单实例:

    #客户端
    import socket
    
    client=socket.socket()
    client.connect(("localhost",6969))
    client.send(b"Hello World")
    data_receive=client.recv(1024)
    print("接收到的数据是:",data_receive)
    client.close()
    
    #服务器端
    import socket
    
    server=socket.socket()
    server.bind(("localhost",6969))
    server.listen()
    print("我要开始监听了")
    conn,port=server.accept()
    print("电话来了")
    data=conn.recv(1024)
    print("收到的数据是:",data)
    conn.send(data.upper())
    print("返回的数据是:",data.upper())
    server.close()
    

     运行结果:客户端

    接收到的数据是: b'HELLO WORLD'
    

      运行结果:服务器端

    我要开始监听了
    电话来了
    收到的数据是: b'Hello World'
    返回的数据是: b'HELLO WORLD'
    

     2.实例2传中文:

    #客户端
    import socket
    
    client=socket.socket()
    client.connect(("localhost",6969))
    client.send("我要开始下载电影了a".encode("utf-8"))
    data_receive=client.recv(1024)
    print("接收到的数据是:",data_receive.decode("utf-8"))
    client.close()
    
    #服务器端
    import socket
    
    server=socket.socket()
    server.bind(("localhost",6969))
    server.listen()
    print("我要开始监听了")
    conn,port=server.accept()
    print("电话来了")
    data=conn.recv(1024)
    print("收到的数据是:",data.decode("utf-8"))
    conn.send(data.upper())
    server.close()
    
    1 我要开始监听了
    2 电话来了
    3 收到的数据是: 我要开始下载电影了a
    接收到的数据是: 我要开始下载电影了A
    

     3.实例-与一个客户端不停地通话,用到 while循环:

    #客户端(发出去的内容是小写的,收到的回应是大写的。)
    import socket
    client=socket.socket()
    #声明socket类型,同时生成socket连接对象;定义地址簇和协议类型(默认IPV4和TCP/IP)
    client.connect(("localhost",6969)) #连接本机的6969端口
    while True:
        msg=input("请输入你的请求信息>>:")
        client.send(msg.encode("utf-8"))
        data=client.recv(1024) #1024个字节,接受服务器端的返回,recv默认是阻塞的。客户端一断开,conn.recv收到的就都是空数据。会陷入死循环。
        print("recv:",data.decode())
    client.close()
    
    #服务器端
    import socket
    server=socket.socket()
    server.bind(('localhost',6969)) #绑定要监听的端口
    server.listen() #监听
    print("我要开始等电话了")
    conn,addr=server.accept()
    print(conn,addr) #就是客户端连过来而在服务器端为其生成的一个连接实例。
    print("电话来了")
    while True:
        data=conn.recv(1024)
        print("recv:",data)
        #conn.send("我是服务器端来的确认信息".encode("utf-8"))
        conn.send(data.upper())
    server.close()
    
    请输入你的请求信息>>:1
    recv: 1
    请输入你的请求信息>>:2
    recv: 2
    请输入你的请求信息>>:3
    recv: 3
    请输入你的请求信息>>:4
    recv: 4
    请输入你的请求信息>>:
    我要开始等电话了
    <socket.socket fd=288, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 6969), raddr=('127.0.0.1', 49602)> ('127.0.0.1', 49602)
    电话来了
    recv: b'1'
    recv: b'2'
    recv: b'3'
    recv: b'4'
    

     4.实例-一个客户通话结束后,第二个客户接进来:

    #客户端(发出去的内容是小写的,收到的回应是大写的。)
    import socket
    client=socket.socket()
    #声明socket类型,同时生成socket连接对象;定义地址簇和协议类型(默认IPV4和TCP/IP)
    client.connect(("localhost",6969)) #连接本机的6969端口
    while True:
        msg=input("请输入你的请求信息>>:").strip()
        if len(msg)==0:
            continue
        client.send(msg.encode("utf-8"))
        data=client.recv(1024) #1024个字节,接受服务器端的返回
        print("recv:",data.decode())
    client.close()
    
    #服务器端
    import socket
    server=socket.socket()
    server.bind(('localhost',6969)) #绑定要监听的端口
    server.listen() #监听
    print("我要开始等电话了")
    while True:
        conn,addr=server.accept()
        print(conn,addr) #就是客户端连过来而在服务器端为其生成的一个连接实例。
        print("电话来了")
        while True:
            data=conn.recv(1024)
            print("recv:",data)
            conn.send("我是服务器端来的确认信息".encode("utf-8"))
            if not data:
                print("Client has lost...")
                break
            conn.send(data.upper())
    server.close()
    
  • 相关阅读:
    《剑指offer》-判断平衡二叉树
    《剑指offer》-前n项和不准用通解和各种判断
    《剑指offer》-统计整数二进制表示中1的个数
    《剑指offer》-双栈实现队列
    《剑指offer》-数组乘积,不使用除法
    《剑指offer》-青蛙跳台阶II
    gradle入门(1-8)gradle 的依赖查看、依赖排除和指定版本(需要验证!)
    groovy入门(2-1)Groovy的Maven插件安装:Plugin execution not covered by lifecycle configuration
    zuul入门(4)zuul的注解@EnableZuulServer和@EnableZuulProxy
    zuul入门(2)zuul的过滤器分类和加载
  • 原文地址:https://www.cnblogs.com/momo8238/p/7272519.html
Copyright © 2011-2022 走看看