zoukankan      html  css  js  c++  java
  • socket实现简单通信会话

     1 #!/usr/bin/env python
     2 # -*- coding:utf-8 -*-
     3 #Author cc
     4 
     5 import socket;
     6 
     7 ip_port = ("127.0.0.1",9998);
     8 
     9 sk = socket.socket();
    10 sk.connect(ip_port);
    11 
    12 while True:
    13     client_input = input(">>:").strip();
    14     if client_input == "q":
    15         break;
    16     sk.sendall(bytes(client_input,"utf8"));
    17     server_replay = sk.recv(1024);
    18     print(str(server_replay,"utf8"));
    19 
    20 sk.close();
     1 #!/usr/bin/env python
     2 # -*- coding:utf-8 -*-
     3 #Author cc
     4 
     5 import socket;
     6 
     7 ip_port = ("127.0.0.1",9998);   #绑定需要开放的socket地址以及端口
     8 
     9 sk = socket.socket();   #创建服务端的socket对象socketserver
    10 sk.bind(ip_port);
    11 sk.listen(5);
    12 
    13 conn,addr = sk.accept();    #accept()函数会返回一个元组,元素1为客户端的socket对象,元素2为客户端的地址(ip地址,端口号)
    14 
    15 while True:
    16     client = conn.recv(1024);   #客户端输入的数据
    17     #strclient = client.decode("utf8")
    18     if client == "q":   #判断是不是输入的q,是则退出
    19         break;
    20     print(str(client,"utf8"));  #打印出客户端的输入
    21     server_response = input("33[31;0m>>:33[0m").strip();    #server端输入数据
    22     conn.send(bytes(server_response,"utf8"));   #发送出数据并编码
    23 
    24 conn.close();

    socket 实现大数据传输

     1 #!/usr/bin/env python
     2 # -*- coding:utf-8 -*-
     3 #Author cc
     4 
     5 import socket;
     6 
     7 ip_port = ("127.0.0.1",9998);
     8 
     9 sk = socket.socket();
    10 sk.connect(ip_port);
    11 
    12 while True:
    13     client_input = input("cmd>>:").strip();    #客户端输入一条命令
    14     if len(client_input) == 0:    #如果输入为空,这直接执行下一步
    15         continue;
    16     if client_input == "q" or client_input == "quit":    #如果输入的是q或者quit,则退出
    17         break;
    18     sk.sendall(bytes(client_input,"utf8"));    #给服务端发送这条命令
    19     server_ask_msg = sk.recv(100);    #接到服务器端返回的数据
    20     cmd_res_msg = str(server_ask_msg.decode()).split("|");    #处理服务器发送过来的数据
    21     print("server response:",cmd_res_msg);    #打印需要处理的字符串大小
    22     if cmd_res_msg[0] == "CMD_REPONSE_SIZE":    #判断服务端收到的数据
    23         cmd_res_size = int(cmd_res_msg[1]);    #将数据转成int格式
    24         sk.send(b"CLIENT_READY_TO_RECV");    #发送一串字符串给客户端
    25     res = '';
    26     received_size = 0;
    27     while received_size < cmd_res_size:     #定义一个循环,接收的数据小于总数据,则进行下一步,否则打印结果
    28         server_replay = sk.recv(1024);
    29         received_size += len(server_replay);
    30         res += str(server_replay.decode());
    31     else:
    32         print(str(res));
    33         print("----recv done----")
    34         #break;
    35 
    36 sk.close();
     1 #!/usr/bin/env python
     2 # -*- coding:utf-8 -*-
     3 #Author cc
     4 
     5 import socket;
     6 import subprocess;
     7 ip_port = ("127.0.0.1",9998);   #绑定需要开放的socket地址以及端口
     8 
     9 sk = socket.socket();   #创建服务端的socket对象socketserver
    10 sk.bind(ip_port);
    11 sk.listen(5);
    12 while True:
    13     print("等待客户端链接...");
    14     conn, addr = sk.accept();  # accept()函数会返回一个元组,元素1为客户端的socket对象,元素2为客户端的地址(ip地址,端口号)
    15     print("新连接:",addr);
    16     while True:
    17         client_data = conn.recv(1024);   #客户端输入的数据
    18         if not client_data:    #如果客户端输入为空,则跳过
    19             continue;
    20         cmd = str(client_data,"utf8")    #收到客户端的命令并赋值给cmd
    21         print("命令:",cmd);    #打印数来
    22         cmd_client = subprocess.Popen(cmd,shell=True,stdout=subprocess.PIPE)    #将收到的命令,用subprocess利用管道给系统处理
    23         cmd_reponse = cmd_client.stdout.read();    #接收到系统处理的数据
    24         if len(cmd_reponse) == 0:    #如果客户端输入的没有返回数据,比如cd之类的命令,则返回下面一句话,不然socket会等待处理,进程会卡死
    25             cmd_reponse = b"cmd execution has no output...";
    26         ask_msg = bytes("CMD_REPONSE_SIZE|%s" % len(cmd_reponse),"utf8");    #将客户端发送过来的数据以一段字符串加字符串长度返回给客户端
    27         conn.send(ask_msg);    #发送数据
    28         client_ask = conn.recv(50);    #接收客户端的数据  是CLIENT_READY_TO_RECV  这一条的作用是防止,上面的字符串和下面的服务端返回结果一起发给客户端。
    29         if client_ask.decode() == "CLIENT_READY_TO_RECV":    #判断刚接收的数据
    30             conn.send(cmd_reponse);   #发送出数据并编码
    31 
    32     conn.close();
  • 相关阅读:
    课程一(Neural Networks and Deep Learning),第三周(Shallow neural networks)—— 1、两层神经网络的单样本向量化表示与多样本向量化表示
    LaTeX技巧:如何高效地将LaTeX代码转为Word公式
    Python使用闭包结合配置自动生成函数
    批量发货阻塞启示:深挖系统薄弱点
    Java8函数式编程探秘
    碎碎念集萃六
    改善代码可测性的若干技巧
    使用yaml+groovy实现Java代码可配置化
    JsonPath:从多层嵌套Json中解析所需要的值
    一个略复杂的数据映射聚合例子及代码重构
  • 原文地址:https://www.cnblogs.com/jcici/p/9789818.html
Copyright © 2011-2022 走看看