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("\033[31;0m>>:\033[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();

 

posted @ 2018-10-15 10:57  jcici  阅读(764)  评论(0编辑  收藏  举报