0
点赞
收藏
分享

微信扫一扫

Python(三、SOCKET)

诗与泡面 2021-09-27 阅读 73

udp发送基本案例

import socket


def main():
    udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    dest_addr = ('192.168.103.114', 60000)
    send_data = input("请输入发送的内容:")
    udp_socket.sendto(send_data.encode('utf-8'), dest_addr)
    udp_socket.close()


if __name__ == "__main__":
    main()

udp接收基本案例

import socket


def main():
    udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    # 如果想本地接收数据,则必须固定端口
    local_addr = ('', 7788)  # ip一般不写,代表本地任何一个ip
    udp_socket.bind(local_addr)
    recv_data = udp_socket.recvfrom(1024)  # 1024表示本地接收的最大字节数
    # recv_data  返回的是一个元组(接收到的数据,(发送方的ip,port))
    print(recv_data[0].decode('gbk'))
    udp_socket.close()


if __name__ == "__main__":
    main()

"""
单工:只能收或者发
半双工:能收发但是不能同时进行
全双工,收发可同时
"""

tcp客户端

import socket


# tcp严格区分客户端和服务器,而udp不分区
def main():
    tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    tcp_socket.connect(('192.168.103.114', 6000))
    tcp_socket.send("测试".encode('utf-8'))
    tcp_socket.close()


if __name__ == "__main__":
    main()

tcp服务端

import socket


def main():
    tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    tcp_socket.bind(('', 7788))
    # 128 代表同一时刻最多只能128个客户端链接,一般都写128但是针对不同系统影响不大
    # 指定最多允许多少个客户连接到服务器。它的值至少为1。收到连接请求后,这些请求需要排队,如果队列满,就拒绝请求
    # 应该理解为阻塞队列的长度,总共与服务器连接的客户端一共有num + 1个。
    # 阻塞队列FIFO,当连接客户端结束后阻塞队列里的第一个客服端与服务器连接成功
    tcp_socket.listen(128)
    client_socket, clientAddr = tcp_socket.accept()
    print(clientAddr)
    # 只要recv_data是None则一定是客户端关闭了,客户端close服务端会接收到空,可以if recv_data直接判断
    recv_data = client_socket.recv(1024)
    print(recv_data.decode('gbk'))
    client_socket.send("thank".encode('gbk'))
    # 代表不会继续给这个客户端服务
    client_socket.close()
    # 关闭则不会有新的客户端到来,所以针对多客户端链接的时候,该句的关闭应该在循环外面
    tcp_socket.close()


if __name__ == "__main__":
    main()

举报

相关推荐

Python socket

python-socket

Python模块-socket

python,socket通信

Python socket模块

python socket 学习

python socket笔记

0 条评论