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. Django基础-02

    django的介绍: Django 中提供了开发网站经常用到的模块,常见的代码都为你写好了,通过减少重复的代码,Django 使你能够专注于 web 应用上有 趣的关键性的东西.为了达到这个目标,Dj ...

  2. xcode: 解决 __nw_connection_get_connected_socket_block_invoke 1 Connection has no connected handler

    Run -> Arguments -> Environment Variables -> Add -> Name: "OS_ACTIVITY_MODE", ...

  3. IIS7.5修改asp的文件上传限制方法

    第一.IIS7.5修改asp的文件上传限制方法 1.打开IIS 2.打开面板中的应用程序开发 asp 3.找到最后的限制属性 4.修改其中的最大请求实体主体限制的值:默认为200000字节,等于195 ...

  4. h265文件分析(纯c解析代码)

    参考链接: 1. HEVC码流解析 https://blog.csdn.net/CrystalShaw/article/details/80624804   2. HEVC编码结构:序列参数集SPS. ...

  5. python3.5+selenium3环境搭建

    windows环境下的操作(例子中的浏览器以火狐浏览器为例,IE和谷歌与此浏览器同理): 准备工具如下: 下载python[python开发环境]:http://python.org/getit/ 下 ...

  6. spring cloud + spring boot + springmvc+mybatis分布式微服务云架构

    做一个微服务架构需要的技术整理: View: H5.Vue.js.Spring Tag.React.angularJs Spring Boot/Spring Cloud:Zuul.Ribbon.Fei ...

  7. complex类的定义和实现

    #include<iostream> #include<cmath> using namespace std; class complex { public: complex( ...

  8. Excel身份证验证,身份证校验公式

    =IF(LEN(Q4)=0,"空",IF(LEN(Q4)=15,"老号",IF(LEN(Q4)<>18,"位数不对",IF(CH ...

  9. [转载]一个高效简洁的Aseprite to Unity导入工具

    原文链接 https://zhuanlan.zhihu.com/p/28644268  期待原作者上传至AssetStore. 今天,我的第一个 Unity 插件 MetaSprite 正式发布了它的 ...

  10. html+css+javascript之间的关系与作用

    三者间的关系 一个基本的网站包含很多个网页,一个网页由html, css和javascript组成. html是主体,装载各种dom元素:css用来装饰dom元素:javascript控制dom元素. ...