zoukankan      html  css  js  c++  java
  • python | 网络编程(socket、udp、tcp)

    一、套接字 socket

    1.1 作用:实现不同主机间的进程间通信(不同电脑、手机等设备之间收发数据)

    1.2 分类:udp、tcp

    1.3 创建 socket

    1 import socket
    2 socket.socket(AddressFamily, Type)

      AddressFamily:AF_INET:用于网络间进程通信;AF_UNIX:用于同一台机器中

      Type:SOCK_DGRAM:upd 协议使用;SOCK_STREAM:tcp 协议使用

    二、upd socket

    2.1 创建 udp socket,并使用其收发数据

     1 import socket
     2 
     3 # 创建 udp 套接字
     4 udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
     5 
     6 # 绑定本地信息,bind后面的()里一定要是个元组!!元组!!
     7 udp_socket.bind(("", 7890))
     8 
     9 # 获取要发送的内容
    10 send_msg = input("请输入要发送的内容:")
    11 
    12 # 使用 udp 发送数据,
    13 udp_socket.sendto(send_msg.encode("utf-8"), ("192.168.xxx.xxx", 9090))
    14 
    15 # 接收数据,1204表示一次最多接收1024个字节
    16 recv_data = udp_socket.recvfrom(1024)
    17 recv_msg = recv_data[0]  # 所接收的数据内容
    18 recv_addr = recv_data[1]  # 远程地址
    19 
    20 # 打印远程发送来的信息
    21 # 如果是从 windows 发来的数据要用 gbk解码
    22 print(str(recv_addr) + ":" + recv_msg.decode("gbk"))
    23 
    24 udp_socket.close()

    三、tcp socket

      tcp 套接字分为服务器和客户端

    3.1 创建  socket,无论客户端和服务器都要写

    1 import socket
    2 
    3 # 创建 tcp 的套接字
    4 tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    5 
    6 # 关闭套接字
    7 tcp_socket.close()

     

    3.2 创建 tcp 客户端 socket,并使用其收发数据

     1 import socket
     2 
     3 # 创建套接字
     4 tcp_client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
     5 
     6 # 连接服务器(!!!区分udp)
     7 tcp_client_socket.connect(("192.168.0.102", 7891))
     8 
     9 # 获取要发送的信息
    10 send_msg = input("请输入要发送的信息:")
    11 
    12 # 发送信息
    13 tcp_client_socket.send(send_msg.encode("utf-8"))
    14 
    15 # 接收返回来的数据
    16 recv_msg = tcp_client_socket.recv(1024)
    17 
    18 tcp_client_socket.close()

    3.3 创建 tcp 服务器 socket,并使用其收发数据即:(即:为客户端服务)

     1 import socket
     2 
     3 # 创建套接字
     4 tcp_ser_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
     5 
     6 # 绑定本地信息
     7 tcp_ser_socket.bind(("", 7890))
     8 
     9 # 变为被动监听套接字(listen)
    10 tcp_ser_socket.listen(128)
    11 
    12 # 等待客户端的链接(accept)
    13 client_socket, client_addr = tcp_ser_socket.accept()
    14 
    15 # 为链接来的客户端服务,接收客户端发来的数据
    16 recv_data = client_socket.recv(1024)
    17 
    18 # 返回数据给客户端,不用再写客户端的地址端口
    19 # client_socket.send("hhhhhh".encode("utf-8"),client_addr)
    20 client_socket.send("hhhhhh".encode("utf-8"))
    21 
    22 # 关闭套接字
    23 client_socket.close()  # 关闭服务器方打开的客户端的套接字
    24 tcp_ser_socket.close()  # 一般不关,关了怎么服务

    挥手握手待补充

    【本文仅作为学习笔记】

  • 相关阅读:
    react深入学习(资料,案例)
    match.exec深入学习
    实用插件表格行列隐藏显示
    下拉选项插件的实现
    表格操作eventTable
    [CentOS7] 挂载iso镜像文件到/media目录下
    [CentOS7] 设置开机启动方式(图形界面或命令行)
    [CentOS7] 磁盘分区(gdisk, fdisk)
    [CentOS7] minimal安装后 出现 没有ifconfig 无法ping 无法yum could not retrieve mirrorlist http://mirrorlist.centos.org/
    [C++]C,C++中使用可变参数
  • 原文地址:https://www.cnblogs.com/ykit/p/11319614.html
Copyright © 2011-2022 走看看