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. Java实现视频转码或压缩demo.

    先点击这里下载资源包(包括jar和文档) 使用这个资源包,处理起来很简单. demo如下: import java.io.File; import it.sauronsoftware.jave.Aud ...

  2. Jmeter之https脚本录制

    jmeter录制脚本时,跟http脚本录制主要区别是,https录制需要添加安全证书.   一.jmeter代理服务器及证书配置. 1.打开jmeter,右键测试计划添加线程组,右键工作台--> ...

  3. numpy数组及处理:效率对比

    def Sum(n): #定义一个函数(注意:格式对齐,否则会出错) a=list(range(n)) b=list(range(0,50000*n,5)) c=[] for i in range(l ...

  4. powershell脚本:你的文件已经被黑客篡改.ps1

    本人原创powershell脚本分享. 脚本用途:列出某目录下,所有软件签名不符的文件. 系统需求: win7 + powershell 2.0 及 以上. #nd你的文件已经被黑客篡改.ps1 ps ...

  5. 转 Redis 总结精讲 看一篇成高手系统-4

    转 Redis 总结精讲 看一篇成高手系统-4 2018年05月31日 09:00:05 hjm4702192 阅读数:125633   本文围绕以下几点进行阐述 1.为什么使用redis 2.使用r ...

  6. Git 工具 - 储藏(Stashing)

    储藏(Stashing) 经常有这样的事情发生,当你正在进行项目中某一部分的工作,里面的东西处于一个比较杂乱的状态,而你想转到其他分支上进行一些工作.问题是,你不想提交进行了一半的工作,否则以后你无法 ...

  7. python 全栈开发笔记 3

    正则表达式 正则表达式(RE)是一种小型的,高度专业化的,它镶嵌在python中,并通过re模块实现,正则表达式编译成一系列的字节码,然后由用c编写的匹配引擎执行. #正则表达式 import re ...

  8. docker学习---第一章节

    一.docker的应用场景有哪些 Web 应用的自动化打包和发布 自动化测试和持续集成.发布 在服务型环境中部署和调整数据库或其他的后台应用 从头编译或者扩展现有的OpenShift或Cloud Fo ...

  9. Vue语法学习第三课——计算属性

    模板内的表达式非常便利,但是设计它们的初衷是用于简单运算的.在模板中放入太多的逻辑会让模板过重且难以维护.对于任何复杂逻辑,都应当使用计算属性. <div id="example&qu ...

  10. C++面试笔记(3)

    20. 浅拷贝与深拷贝 如何理解C++中的浅拷贝与深拷贝 深拷贝和浅拷贝 在进行对象拷贝时,当对象包含对其他资源的引用,如果需要拷贝这个独享所引用的对象,那就是深拷贝,否则就是浅拷贝 *** 21.构 ...