zoukankan      html  css  js  c++  java
  • python之socket

    socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求。

    socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,对于文件用【打开】【读写】【关闭】模式来操作。socket就是该模式的一个实现,socket即是一种特殊的文件,一些socket函数就是对其进行的操作(读/写IO、打开、关闭)

    socket和file的区别:

    • file模块是针对某个指定文件进行【打开】【读写】【关闭】
    • socket模块是针对 服务器端 和 客户端Socket 进行【打开】【读写】【关闭】

    服务端代码

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    import socket
    import subprocess
    import time
    ip_port = ('127.0.0.1',9999)

    sk = socket.socket() #默认TCP接口,这里生成一个句柄
    sk.bind(ip_port) #绑定IP和端口
    sk.listen(5) #监听,5带表最大允许连5个

    while True:
    print('server waiting...')
    conn,addr = sk.accept() #等待链接.如果获取到链接,就会自动生成一个实例.返回两个值,conn是生成的实例,addr代表地址
    while True:
    client_data = conn.recv(1024)
    if not client_data:break
    print("recv",client_data)
    cmd_call = subprocess.Popen(client_data,shell=True,stdout=subprocess.PIPE)
    cmd_result = cmd_call.stdout.read()
    if len(cmd_result) == 0:
    cmd_result = "cmd execution has no output."
    ack_msg = b"CMD_RESULT_SIZE|%s" % len(cmd_result)
    conn.sendall(ack_msg)
    client_ack = conn.recv(50)
    if client_ack.decode() == 'CLIENT_READY_TO_RECV':
    conn.sendall(cmd_result)
    conn.close()

    客户端代码:

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    import socket

    ip_port = ('127.0.0.1',9999)
    sk = socket.socket()
    sk.connect(ip_port)
    while True:
    user_input = raw_input("cmd>>:").strip()
    if len(user_input)==0:continue
    if user_input == 'q':break
    sk.sendall(user_input)
    server_ack_msg = sk.recv(100)
    cmd_res_size = str(server_ack_msg).split('|')
    if cmd_res_size[0] == "CMD_RESULT_SIZE":
    cmd_res_size = int(cmd_res_size[1])
    sk.sendall("CLIENT_READY_TO_RECV")
    res = ''
    received_size = 0
    while received_size < cmd_res_size:
    date = sk.recv(500)
    received_size +=len(date)
    res += date
    else:
    print(res)
    print('-----recv done-----')
    sk.close()

    更多内容:http://www.cnblogs.com/wupeiqi/articles/5040823.html
  • 相关阅读:
    hdu 2222 Keywords Search
    Meet and Greet
    hdu 4673
    hdu 4768
    hdu 4747 Mex
    uva 1513 Movie collection
    uva 12299 RMQ with Shifts
    uva 11732 strcmp() Anyone?
    uva 1401
    hdu 1251 统计难题
  • 原文地址:https://www.cnblogs.com/TaleG/p/6685443.html
Copyright © 2011-2022 走看看