zoukankan      html  css  js  c++  java
  • day32

    """

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

      socket是什么?

          翻译过来称为套接字

       是对底层的 TCP IP UDP   等网络协议进行封装

          使得上层的言论,他就是一个封装好的模块!

          要完成网络通讯,只需要使用系统提供的socket模块就行

     TCP和UDP是传输层最常见的协议

     主要控制传输数据的方式

     TCP的传输的方式

           优点:通过三次握手来与服务器建立连接

               可以保证数据的完整性

                   a机器给b机器发送数据包 要求b机器必须立即返回一个确认包

                    a机器会等待一段时间,如果超时还没有收到确认,否则重发数据

            缺点:传输频率低 

            使用场景:文子聊天,支付宝转账等

         UDP

             传输方式:不需要建立连接,自己发送

             缺点:不能保证数据的完整性

             优点:传输效率比TCP高

             使用场景:视频通话,语音通话,UOP

    Python中的socket

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

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

        使用socket来完成TCP通讯

            应该先完成服务器的代码编写

    """

    3.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()

    4.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()

    5.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("utm-8"),("127.0.0.1",10000))

      关闭资源

    s.close()

    6.UDP客户端

    import socket

     1.创建socket(type=socket.SOCK_DGRAM)

    while True:

       msg=input(">>>:")

       c.sendto(msg.encode("utf-8"),(127.0.0.1",10000))

    c.close()

    7.聊天的客户端

    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)

           client.close()

           break

    7.聊天服务器

    """

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

    """

    import socket

    server=socket.socket()

    server.bind(("127.0.0.1",65535))

    server.listen(5)

    clint,c_address=server.accept()

    while True:

      data = client.recv(1024).decode("utp-8")

      print("收到来自客户端的数据:",data)

              如果对方发来一个over我就关闭连接

               if data == "over":

                    client.close()

                    break

                  把对方传过来的数据转换为大写 在发回去!

               client,send(data.upper().encode("utf-8"))

     关闭服务端

    server.close()

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

  • 相关阅读:
    推荐一系列优秀的Android开发源码
    FlexViewer框架地图控件三问
    dll转移转载
    共享quotedprintable解码(C#)转载
    开源OCR引擎Tesseract
    Qt Features for Hybrid Web/Native Application Development转载
    利用QT进行web与本地混合应用开发转载
    js 中 document.createEvent的用法转载
    用Python多线程抓取并验证代理(转)
    API Hook完全手册
  • 原文地址:https://www.cnblogs.com/hui2002/p/9898200.html
Copyright © 2011-2022 走看看