zoukankan      html  css  js  c++  java
  • python网络编程:socket套接字

    本文目录:

    一、socket

    二、TCP服务器

    三、TCP客户端

    四、UDP服务器

    五、UDP客户端

    六、聊天的客户端

    七、聊天的服务器

     

    一、socket

    socket是什么?

    学习网络编程 其实就是在学socket
        
    翻译过来称为套接字,是对底层的 TCP IP UDP 等网络协议进行封装,使得上层的应用程序开发者,不用直接接触这对复杂,丑陋的协议,在程序员的言论,他就是一个封装好的模块!
    要完成网络通讯,只需要使用系统提供的socket模块就行,TCP和UDP是传输层最常见的协议

    TCP和UDP的优缺点

    主要控制传输数据的方式
        TCP的传输方式
            优点:通过三次握手来与服务器建立连接
                 可以保证数据的完整性
                    a机器给b机器发送数据包  要求b机器必须立即返回一个确认包
                    a机器会等待一段时间,如果超时还没有收到确认,则重发数据
            缺点:传输效率低
            使用场景: 文字聊天,支付宝转账等,
        UDP
            传输方式:不需要建立连接,直接发送
            缺点: 不能保证数据的完整性
            优点:传输效率比TCP高
            使用场景:视频通话,语音通话,UDP
    """ 
       python中的socket
    
        在使用socket的时候用户需要关心的是 ip地址,port端口, 传输协议TCP/UDP,你要发送的数据data
    
        在写网络编程的时候,必然是有两台代码,对应着客户端和服务器
    
        使用socket来完成TCP通讯
            应该先完成服务器的代码编写
    
    """

    二、TCP服务器

    import socket
    # 1.创建一个代表服务器的socket对象
    s = socket.socket()
    
    # 2.绑定端口号和IP地址
    # 127.0.0.1 表示当前这个电脑的ip
    address = ("127.0.0.1",8080)
    s.bind(address)
    
    print("服务器已启动!")
    
    # 3.开始监听这个端口
    # 5表示 可以有5个处于半连接状态的连接   指的不是最大连接数
    s.listen(5)
    print("test")
    
    # 4.接受连接请求
    # 该函数是阻塞的 会卡主程序的执行,必须等到有一个客户端进来才会继续执行
    # 返回元组  第一个是代表客户端的socket对象 第二客户端的地址信息
    client,c_address = s.accept()
    print("有一个连接已建立!")
    print(c_address)
    
    # 给客户端发送数据
    
    # 5.读写数据 
    # 接受数据
    res = client.recv(1024)
    print(res)
    
    
    
    # 6.关闭连接
    # s.close()

     

    三、TCP客户端

    import socket
    
    # 1.创建客户端的socket对象
    c = socket.socket()
    
    # 2.指定服务器的ip和port
    server_address = ("127.0.0.1",8080)
    
    # 3.建立连接
    c.connect(server_address)
    
    # 4.读写数据
    # 发送数据到服务器
    c.send("hello 我是客户端!".encode("utf-8"))
    
    # 5.关闭连接
    c.close()

    四、UDP服务器

    import socket
    # 1.创建socket对象
    s = socket.socket(type=socket.SOCK_DGRAM)
    
    # 2.绑定端口和ip
    s.bind(("127.0.0.1",10000))
    
    while True:
        # 3.接受数据
        res = s.recv(1024)
        print(res)
    
    while True:
        msg = input(">>>:")
        # 需要获取对方的ip和端口
        #s.sendto(msg.encode("utf-8"), ("127.0.0.1", 10000))
    
    # 关闭资源
    s.close()

    五、UDP客户端

    import socket
    # 1.创建socket对象
    s = socket.socket(type=socket.SOCK_DGRAM)
    
    # 2.绑定端口和ip
    s.bind(("127.0.0.1",10000))
    
    while True:
        # 3.接受数据
        res = s.recv(1024)
        print(res)
    
    while True:
        msg = input(">>>:")
        # 需要获取对方的ip和端口
        #s.sendto(msg.encode("utf-8"), ("127.0.0.1", 10000))
    
    # 关闭资源
    s.close()

    六、聊天服务器

    import socket
    # 1.创建socket对象
    s = socket.socket(type=socket.SOCK_DGRAM)
    
    # 2.绑定端口和ip
    s.bind(("127.0.0.1",10000))
    
    while True:
        # 3.接受数据
        res = s.recv(1024)
        print(res)
    
    while True:
        msg = input(">>>:")
        # 需要获取对方的ip和端口
        #s.sendto(msg.encode("utf-8"), ("127.0.0.1", 10000))
    
    # 关闭资源
    s.close()

    七、聊天客户端

    import socket
    
    client = socket.socket()
    
    client.connect(("127.0.0.1",65535))
    
    while True:
        # 发送
        client.send(input(">>>:").encode("utf-8"))
    
        # 接收
        data = client.recv(1024).decode("utf-8")
        print(data)
        if len(data) == 0:
            client.close()
            break
  • 相关阅读:
    CSS团队协作规范
    百度前端学院-基础学院-第四课
    百度前端学院-基础学院-第三课
    百度前端学院-基础学院-第二课
    vue(三)-父子组件通信
    setTimeout()与clearTimeout()
    vue(二)-父子组件语法
    vue(一)使用vue-cli搭建项目
    CSS table-layout 属性
    git学习
  • 原文地址:https://www.cnblogs.com/wuzhengzheng/p/10268518.html
Copyright © 2011-2022 走看看