zoukankan      html  css  js  c++  java
  • Python学习——socket 模块

    http://www.cnblogs.com/alex3714/articles/5830365.html 可以看的内容

    socket ssh (不带防止粘包的方法)

    #! /usr/bin/env python
    # -*- coding:utf-8 -*-
    # Author Ian Ying
    # mail: kongqing.ying@yitu-inc.com
    
    import socket
    import os
    
    server = socket.socket()
    server.bind(('localhost', 6969))  #绑定被监听端口
    server.listen(5)   #监听端口
    while True:
        print("我要开始等电话了")
        conn, addr = server.accept()  # 就是等待的意思
        #conn就是客户端连过来的时候,在服务器端为其生成的一个连接实例
        print("电话来了%s"% [conn, addr])
        while True:
            data = conn.recv(1024)
            if not data:
                print('client is lost.')
                break
            # res = os.popen(data).read() #popen就是打开命令执行,read就是获取结果
            # with open('filename', 'r') as ret:  #这两行就 可以用过来传输文件了。
            #     data = ret.read()
            print('receive:',data)
            conn.send(data.upper())
    
    
    server.close()

    socket client 模块

    #! /usr/bin/env python
    # -*- coding:utf-8 -*-
    # Author Ian Ying
    # mail: kongqing.ying@yitu-inc.com
    
    import socket
    
    
    client = socket.socket() #声明socket类型,同时生成socket链接对象
    client.connect(('localhost',6969))   #localhost就是本机地址
    
    while True:
        msg = input('input msg >>:').strip()
        if len(msg) == 0: continue  #检查msg的信息,防止无输入信息
        #client.send(b"Hello, world!") #发送信息
        client.send(msg.encode('utf-8'))
    
        data = client.recv(1024) #默认接受1024字节,就是1k
        # with open('filename', 'w') as ret:  # 这两行就 可以用过来传输文件了。
        #     ret = data.write()
    
        print(data.decode())
    
    client.close() #关闭端口

    防止粘包的socket_ssh.py

     1 #! /usr/bin/env python
     2 # -*- coding:utf-8 -*-
     3 # Author Ian Ying
     4 # mail: kongqing.ying@yitu-inc.com
     5 
     6 import socket
     7 import os
     8 
     9 server = socket.socket()
    10 server.bind(('localhost', 6969))  #绑定被监听端口
    11 server.listen(5)   #监听端口
    12 while True:
    13     print("我要开始等电话了")
    14     conn, addr = server.accept()  # 就是等待的意思
    15     #conn就是客户端连过来的时候,在服务器端为其生成的一个连接实例
    16 
    17     while True:
    18         data = conn.recv(1024).decode()
    19         print("电话来了%s" % type(data))
    20         # if type(data) is str:
    21         #     data = data.strip()
    22         if not data:
    23             print('client is lost.')
    24             break
    25         cmd_res = os.popen(data).read() #popen就是打开命令执行,read就是获取结果
    26         cmd_res_size = str(len(cmd_res.encode("utf-8")))
    27         print("before send",len(cmd_res),"size after encode", cmd_res_size)
    28         if len(cmd_res) == 0:
    29             print("there is no output.")
    30             res_warning = "there is no output."
    31             conn.send(res_warning.encode("utf-8"))
    32             continue
    33         else:
    34             conn.send(cmd_res_size.encode("utf8"))
    35             print(conn.recv(1024).decode())  #通过接收数据的形式来强制发送缓冲区的数据,防止粘包。
    36         # with open('filename', 'r') as ret:  #这两行就 可以用过来传输文件了。
    37         #     data = ret.read()
    38         #print('receive:',data)
    39         print('receive:', data)
    40         conn.send(cmd_res.encode("utf-8"))
    41         # conn.send(bytes(cmd_res)) #不可行。传输的时候是需要encoding
    42 
    43 
    44 server.close()

    socket_client.py

    #! /usr/bin/env python
    # -*- coding:utf-8 -*-
    # Author Ian Ying
    # mail: kongqing.ying@yitu-inc.com
    
    import socket
    
    
    client = socket.socket() #声明socket类型,同时生成socket链接对象
    client.connect(('localhost',6969))   #localhost就是本机地址
    
    while True:
        msg = input('input msg >>:').strip()
        if len(msg) == 0: continue  #检查msg的信息,防止无输入信息
        #client.send(b"Hello, world!") #发送信息
        client.send(msg.encode('utf-8'))
        received_size = client.recv(1024).decode() #用来记录接受的数据大小
        print("接收的数据大小", received_size)
        received_cont = b''
        received_cont_size = 0  # 用来判断接受数据的大小
        if received_size != "there is no output." :
            client.send("准备好了,可以发送。".encode())  #发送确认信息,以防止粘包
            received_size = int(received_size) #数据需要变成int才能进行判断
            while received_size != received_cont_size:  #判断encode后的长度是否一致。
                received_cont_for_test = client.recv(1024)
                received_cont_size += int(len(received_cont_for_test))
                received_cont = received_cont + received_cont_for_test
                print("当前结束后的数据大小为:", received_cont_size)
                # print(received_cont_size)
            else:
                print("数据接收完成,接收的数据大小为:", received_cont_size)
                print("接收的内容为:
    ",received_cont.decode(),"
    ")
        else:
            print("output:
    ", received_size)
    
    
            # data = client.recv(1024) #默认接受1024字节,就是1k
            # with open('filename', 'w') as ret:  # 这两行就 可以用过来传输文件了。
            #     ret = data.write()
            # print(data.decode())
            # print(str(data))
    
    
    client.close() #关闭端口
  • 相关阅读:
    hdu 4710 Balls Rearrangement()
    hdu 4707 Pet(DFS水过)
    hdu 4706 Children's Day(模拟)
    hdu 4712 Hamming Distance(随机函数暴力)
    csu 1305 Substring (后缀数组)
    csu 1306 Manor(优先队列)
    csu 1312 榜单(模拟题)
    csu 1303 Decimal (数论题)
    网络爬虫
    Python处理微信利器——itchat
  • 原文地址:https://www.cnblogs.com/Ian-learning/p/8454597.html
Copyright © 2011-2022 走看看