1.根据netstat端口的找到进程号---->根据进程号找到进程名称-------->终止进程

1) netstat    最后一列是5432

C:\Users\Administrator> netstat -ano|findstr 8848
TCP 127.0.0.1:8848 0.0.0.0:0 LISTENING 5432

2) tasklist核实进程名称以及内存占用情况

C:\Users\Administrator>tasklist /fi "PID eq 5432"

映像名称                       PID 会话名              会话#       内存使用
========================= ======== ================ =========== ============
python.exe 5432 Console 1 10,576 K

3) taskill 终止进程

C:\Users\Administrator>tskill  5432

4) 再次查看已经消失

socket和tcp的对应关系

socket简单编程

ps:无论是服务端还是客户端,当发出send命令时,就会进入recv状态

recv(n)   n代表的就是接受的最大字节数

粘包现象:

接收方没有及时接收缓冲区的包,造成多个包接收(客户端发送了一段数据,服务端只收了一小部分,服务端下次再收的时候还是从缓冲区拿上次遗留的数据,产生粘包)

解决方法:

服务端

import socket
import subprocess
import struct
skt_s = socket.socket()
skt_s.bind(("127.0.0.1",8888))
skt_s.listen(10)
while 1:
conn,addr = skt_s.accept()
n = 1
while 1:
try:
cmd = conn.recv(1024)
cmd_str = cmd.decode("utf-8")
if cmd_str.upper() == "Q":
break
obj = subprocess.Popen(cmd_str,shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
std_out = obj.stdout.read()
std_err = obj.stderr.read()
std = std_out + std_err
std_size = len(std)
std_bytes = struct.pack('i',std_size)
print(std_bytes)
conn.send(std_bytes)
conn.send(std)
print("服务器收到的第%s的回应" %n)
n += 1
except ConnectionResetError:
break
conn.close()

客户端

import socket
import struct
skt_c = socket.socket()
skt_c.connect(("127.0.0.1",8888))
while 1:
msg = input(">>>")
if msg.upper() == "Q":
break
if msg:
skt_c.send(msg.encode("utf-8"))
std_bytes = skt_c.recv(4)
len_size = struct.unpack('i',std_bytes)
print(len_size)
total_data = b''
while len(total_data) < len_size[0]:
total_data += skt_c.recv(1024)
print(total_data.decode("gbk"))
else:
print("输入不能为空")
skt_c.close()

高级版解决粘包现象:

服务端:

import subprocess
import socket
import json
import struct srv = socket.socket()
srv.bind(("127.0.0.1", 8848))
srv.listen(10)
while 1:
conn, addr = srv.accept()
while 1:
try:
cmd = conn.recv(1024)
cmd_str = cmd.decode("utf-8")
obj = subprocess.Popen(cmd_str,
shell=True,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE
)
std = obj.stdout.read() + obj.stderr.read()
std_len = len(std)
# 结果长度封装到字典dic中
dic = {"file_size": std_len}
# 将字典dic变成json格式的字符串 dic_json
dic_json = json.dumps(dic)
# 将dic_json字符串变成字节
dic_json_byte = dic_json.encode("utf-8")
# 求下变成字节后总共有多少个长度
dic_json_byte_len = len(dic_json_byte)
# 将dic_json_byte_len变成固定长度的struct格式的字节
dic_json_byte_struct = struct.pack("i", dic_json_byte_len)
print(dic_json_byte_struct)
# 发送前四个字节
conn.send(dic_json_byte_struct)
conn.send(dic_json_byte)
conn.send(std)
except Exception:
break
conn.close()

客户端:

import struct
import socket
import json cli = socket.socket()
cli.connect(("127.0.0.1",8848))
while True:
try:
cmd = input(">>>")
if cmd.upper() == "Q":
break
elif cmd:
cli.send(cmd.encode("utf-8"))
dic_json_byte_struct = cli.recv(4)
# 将dic_json_byte_struct变成int长度
dic_json_byte_len = struct.unpack("i",dic_json_byte_struct)[0]
# 接收上步得到的长度个字节
dic_json_byte = cli.recv(dic_json_byte_len)
# 变成json格式的字符串
dic_json = dic_json_byte.decode("utf-8")
# 将json变成字典
dic = json.loads(dic_json)
# 获取出数据的总长度
ret_size = dic["file_size"]
total_data = b""
while len(total_data) < ret_size:
total_data += cli.recv(1024)
print(total_data.decode("gbk"))
else:
print("命令不能为空!")
except Exception:
break
cli.close()

网络编程三 Socket的更多相关文章

  1. Linux网络编程(三)

    Linux网络编程(三) wait()还是waitpid() Linux网络编程(二)存在客户端断开连接后,服务器端存在大量僵尸进程.这是由于服务器子进程终止后,发送SIGCHLD信号给父进程,而父进 ...

  2. java基础-网络编程(Socket)技术选型入门之NIO技术

    java基础-网络编程(Socket)技术选型入门之NIO技术 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.传统的网络编程 1>.编写socket通信的MyServer ...

  3. 网络编程与socket套接字

    网络编程与socket套接字 传输层 PORT协议 port是一种接口,数据通过它在计算机和其他设备(比如打印机,鼠标,键盘或监视器)之间,网络之间和其他直接连接的计算机之间传递 TCP协议 ​ 传输 ...

  4. python 网络编程:socket(二)

    上节地址:Python网络编程:socket 一.send和sendall区别 send,sendall         ret = send('safagsgdsegsdgew') #send 发送 ...

  5. Linux高并发网络编程开发——10-Linux系统编程-第10天(网络编程基础-socket)

    在学习Linux高并发网络编程开发总结了笔记,并分享出来.有问题请及时联系博主:Alliswell_WP,转载请注明出处. 10-Linux系统编程-第10天(网络编程基础-socket) 在学习Li ...

  6. Python之路(第三十篇) 网络编程:socket、tcp/ip协议

    一.客户端/服务器架构 1.硬件C/S架构(打印机) 打印机作为一个服务端,电脑连接打印机进行打印 2.软件C/S架构 互联网中处处是C/S架构 如谷歌网站是服务端,你的浏览器是客户端(B/S架构也是 ...

  7. Linux 网络编程三(socket代码详解)

    //网络编程客户端 #include <stdio.h> #include <stdlib.h> #include <string.h> #include < ...

  8. 浅谈TCP/IP网络编程中socket的行为

    我认为,想要熟练掌握Linux下的TCP/IP网络编程,至少有三个层面的知识需要熟悉: 1. TCP/IP协议(如连接的建立和终止.重传和确认.滑动窗口和拥塞控制等等) 2. Socket I/O系统 ...

  9. iOS 网络编程:socket

    @import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/c ...

随机推荐

  1. Linux关机总结

    立刻关机 root@ubuntu17:~# shutdown -h now 100分钟后关机 root@ubuntu17:~# shutdown -h + Shutdown scheduled -- ...

  2. IoT experitment

    Abstract: In order to solve the problems of complex experiment management, complicated teaching task ...

  3. springboot+mybatis+thymeleaf项目搭建及前后端交互

    前言 spring boot简化了spring的开发, 开发人员在开发过程中省去了大量的配置, 方便开发人员后期维护. 使用spring boot可以快速的开发出restful风格微服务架构. 本文将 ...

  4. egret 简单的一笔画算法,在wing中可以直接跑(以后玩这类游戏就有个作弊器了)

    /** * 在Main中创建游戏场景 * Create a game scene */ private createGameScene() { MtwGame.Instance.init(this.s ...

  5. MobX+react使用小demo

    第一次接触mobx,网上找了很多例子,写此主要总结一下create-react-app + mobx入门 create-react-app myreact cd myreact npm install ...

  6. 获取当前TestStep发送的request信息

    在当前test step的Script Assertion里添加 // Get request url def requestURL = messageExchange.getEndpoint() / ...

  7. 非node环境下的vue.js 实现简单的购物车计算功能 样式请无视

    都说vue的双向数据绑定好用,自己用了下,感觉做购物车没想象中好用.自己的实现如下: <!DOCTYPE html> <html lang="en"> &l ...

  8. python 第三方库 dateutil.parser 使用说明

    dateutil.parser 顾名思意 就是与日期相关库里的一个日期解析器 能够将字符串 转换为日期格式 我们来看看具体的用法 首先 需要在线安装 pip install python-dateut ...

  9. DeepCTR专题:Neural Factorization Machines 论文学习和实现及感悟

    papers地址:https://arxiv.org/pdf/1708.05027.pdf 借用论文开头,目前很多的算法任务都是需要使用category feature,而一般对于category f ...

  10. JS 中的对象

    对象就是一个由属性构成的无序列合集. var myObj = { name: ‘suki’, age: 21, interests: [‘guitar’, ‘tennis’] }; 属性是没有顺序的, ...