• 2018.11.2


    """
    学习网络编程 其实就是在学socket

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

    TCP和UDP是传输层最常见的协议
    主要控制传输数据的方式
    TCP的传输方式
    优点:通过三次握手来与服务器建立连接
    可以保证数据的完整性
    a机器给b机器发送数据包 要求b机器必须立即返回一个确认包
    a机器会等待一段时间,如果超时还没有收到确认,则重发数据
    缺点:传输效率低
    使用场景: 文字聊天,支付宝转账等,
    UDP
    传输方式:不需要建立连接,直接发送
    缺点: 不能保证数据的完整性
    优点:传输效率比TCP高
    使用场景:视频通话,语音通话,UDP

    python中的socket

    在使用socket的时候用户需要关心的是 ip地址,port端口, 传输协议TCP/UDP,你要发送的数据data

    在写网络编程的时候,必然是有两台代码,对应着客户端和服务器

    使用socket来完成TCP通讯
    应该先完成服务器的代码编写

    """
    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对象
    c = socket.socket(type=socket.SOCK_DGRAM)
    while True:
    msg = input(">>>:")
    c.sendto(msg.encode("utf-8"),("127.0.0.1",10000))

    c.close()

    简单的互相聊天程序 TCP
    客户端
    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

    """
    正常的聊天的程序 客户端发送的数据 先发送到服务器端 服务器端把消息转发给你的目标好友


    """
    服务器
    import socket

    server = socket.socket()
    server.bind(("127.0.0.1",65535))
    server.listen(5)

    client, c_address = server.accept()

    while True:
    data = client.recv(1024).decode("utf-8")
    print("收到来自客户端的数据:",data)
    # 如果对方发来一个over 我就关闭连接
    if data == "over":
    client.close()
    break
    # 把对方传过来的数据转换为大写 在发回去!
    client.send(data.upper().encode("utf-8"))

    # 关闭服务器端
    server.close()

    # 需求 客户端输入cmd命令 发送给服务器执行 服务器执行(subprocess)完后返回 执行结果

  • 相关阅读:
    hdu4554 A Famous Game 概率期望
    【BZOJ】【1552】【Cerc2007】robotic sort / 【3506】【CQOI2014】排序机械臂
    【BZOJ】【1007】【HNOI2008】水平可见直线
    【BZOJ】【1025】【SCOI2009】游戏
    【BZOJ】【1024】【SCOI2009】生日快乐
    【BZOJ】【1023】【SHOI2008】cactus仙人掌图
    【BZOJ】【3504】【CQOI2014】危桥
    【BZOJ】【1021】【SHOI2008】Dept循环的债务
    【BZOJ】【1020】【SHOI2008】安全的航线flight
    【BZOJ】【1019】【SHOI2008】汉诺塔
  • 原文地址:https://www.cnblogs.com/jutao/p/9898419.html
Copyright © 2020-2023  润新知