zoukankan      html  css  js  c++  java
  • 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)完后返回 执行结果

  • 相关阅读:
    Spring MVC Ajax 嵌套表单数据的提交
    Spring MVC 过滤静态资源访问
    Spring MVC 页面跳转时传递参数
    IDEA Maven 三层架构 2、运行 springMVC
    IDEA Maven 三层架构 1、基本的Archetype 搭建
    EasyUI DataGrid 基于 Ajax 自定义取值(loadData)
    Spring MVC Ajax 复杂参数的批量传递
    Mybatis Sql片段的应用
    在 Tomcat 8 部署多端口项目
    自动升级的设计思路与实现
  • 原文地址:https://www.cnblogs.com/jutao/p/9898419.html
Copyright © 2011-2022 走看看