zoukankan      html  css  js  c++  java
  • Python网络编程

    socket server

    #-*- coding:utf-8 -*-
    
    import socket
    
    #ss = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    #创建一个  IPv4 的tcp socket ss 对象
    ip = '127.0.0.1'
    port = 6789
    ip_port = (ip,port)
    
    ss = socket.socket(socket.AF_INET,socket.SOCK_STREAM)  #创建套接字
    ss.bind(ip_port)                                       #绑定服务端口
    ss.listen(5)                                           #监听连接请求
    print('------------------------********------------------------------------')
    print('启动 socket 服务, 等待连接....')
    conn,address  = ss.accept()                     #等待连接,此处自动阻塞
    #被动接受客户端连接,(阻塞式)等待连接的到来,并返回(conn,address)二元元组,其中conn是一个通信对象,可以用来接收和发送数据。address是连接客户端的地址。
    # conn 是服务端 对应的套接字
    print(conn)
    print('------------------------********------------------------------------')
    print(address)
    print('------------------------********------------------------------------')
    
    while True:
        client_data = conn.recv(1024).decode()   #接收数据包,并且用 decode() 进行解码,socket 通信通过  bytes 进行传输
        if client_data == 'exit':                # 判断是否退出连接
            exit('通信结束')
        print('来自地址: %s 的客户端发送了: %s' % (address, client_data))
        inp = input('回复的内容:').encode()
        conn.sendall(inp)     #响应信息 并进行编码
    
    conn.close()                                 #关闭连接

    socket client 

    #-*- coding:utf-8 -*-
    
    import socket
    
    ip = '127.0.0.1'
    port = 6789
    ip_port = (ip,port)
    
    cs = socket.socket(socket.AF_INET,socket.SOCK_STREAM)   #创建 套接字
    cs.connect(ip_port)
    
    while True:     # 通过一个死循环不断接收用户输入,并发送给服务器
        inp = input('请输入要发送的内容:  '.strip())   #strip 消除内容左右的空格
        if not inp:                                  #如果不为真
            continue
        cs.sendall(inp.encode())                    #发送数据,并且进行编码为 bytes
    
        if inp == 'exit':
            print('通信结束')
            break
        server_reply = cs.recv(1024).decode()      #接收服务的响应,并且解码
        print(server_reply)
    cs.close()

    多线程

    # -*- coding:utf-8 -*-
    
    import socket
    import threading        # 导入线程模块
    
    
    def link_handler(link, client):
        """
        该函数为线程需要执行的函数,负责具体的服务器和客户端之间的通信工作
        :param link: 当前线程处理的连接
        :param client: 客户端ip和端口信息,一个二元元组
        :return: None
        """
        print("服务器开始接收来自[%s:%s]的请求...." % (client[0], client[1]))
        while True:     # 利用一个死循环,保持和客户端的通信状态
            client_data = link.recv(1024).decode()
            if client_data == "exit":
                print("结束与[%s:%s]的通信..." % (client[0], client[1]))
                break
            print("来自[%s:%s]的客户端向你发来信息:%s" % (client[0], client[1], client_data))
            link.sendall('服务器已经收到你的信息'.encode())
        link.close()
    
    
    ip_port = ('127.0.0.1', 9999)
    sk = socket.socket()            # 创建套接字
    sk.bind(ip_port)                # 绑定服务地址
    sk.listen(5)                    # 监听连接请求
    
    print('启动socket服务,等待客户端连接...')
    
    while True:     # 一个死循环,不断的接受客户端发来的连接请求
        conn, address = sk.accept()  # 等待连接,此处自动阻塞
        # 每当有新的连接过来,自动创建一个新的线程,
        # 并将连接对象和访问者的ip信息作为参数传递给线程的执行函数
        t = threading.Thread(target=link_handler, args=(conn, address))
        t.start()

    UDP

    # 服务端
    import socket
    ip_port = ('127.0.0.1', 9999)
    sk = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, 0)
    sk.bind(ip_port)
    
    while True:
        data = sk.recv(1024).strip().decode()
        print(data)
        if data == "exit":
            print("客户端主动断开连接!")
            break
    
    sk.close()
    
    # 客户端
    import socket
    ip_port = ('127.0.0.1', 9999)
    
    sk = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, 0)
    while True:
        inp = input('发送的消息:').strip()
        sk.sendto(inp.encode(), ip_port)
        if inp == 'exit':
            break
    
    sk.close()
  • 相关阅读:
    pyspark读取parquet数据
    python求时间差
    pandas索引操作之loc,iloc,ix等方法
    pandas的concat和drop函数
    mysql语句的书写顺序和执行顺序
    hive的lower,upper,length,concat,lpad,rpad,cast,split函数简述
    hive的floor函数,ceil函数,round函数
    Pandas建立空的dataframe和cumsum累加函数
    Python基础笔记二之求序列均值、标准差、中位数、分位数
    NAT实验
  • 原文地址:https://www.cnblogs.com/zy09/p/11766231.html
Copyright © 2011-2022 走看看