网络编程三 Socket
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的更多相关文章
- Linux网络编程(三)
Linux网络编程(三) wait()还是waitpid() Linux网络编程(二)存在客户端断开连接后,服务器端存在大量僵尸进程.这是由于服务器子进程终止后,发送SIGCHLD信号给父进程,而父进 ...
- java基础-网络编程(Socket)技术选型入门之NIO技术
java基础-网络编程(Socket)技术选型入门之NIO技术 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.传统的网络编程 1>.编写socket通信的MyServer ...
- 网络编程与socket套接字
网络编程与socket套接字 传输层 PORT协议 port是一种接口,数据通过它在计算机和其他设备(比如打印机,鼠标,键盘或监视器)之间,网络之间和其他直接连接的计算机之间传递 TCP协议 传输 ...
- python 网络编程:socket(二)
上节地址:Python网络编程:socket 一.send和sendall区别 send,sendall ret = send('safagsgdsegsdgew') #send 发送 ...
- Linux高并发网络编程开发——10-Linux系统编程-第10天(网络编程基础-socket)
在学习Linux高并发网络编程开发总结了笔记,并分享出来.有问题请及时联系博主:Alliswell_WP,转载请注明出处. 10-Linux系统编程-第10天(网络编程基础-socket) 在学习Li ...
- Python之路(第三十篇) 网络编程:socket、tcp/ip协议
一.客户端/服务器架构 1.硬件C/S架构(打印机) 打印机作为一个服务端,电脑连接打印机进行打印 2.软件C/S架构 互联网中处处是C/S架构 如谷歌网站是服务端,你的浏览器是客户端(B/S架构也是 ...
- Linux 网络编程三(socket代码详解)
//网络编程客户端 #include <stdio.h> #include <stdlib.h> #include <string.h> #include < ...
- 浅谈TCP/IP网络编程中socket的行为
我认为,想要熟练掌握Linux下的TCP/IP网络编程,至少有三个层面的知识需要熟悉: 1. TCP/IP协议(如连接的建立和终止.重传和确认.滑动窗口和拥塞控制等等) 2. Socket I/O系统 ...
- iOS 网络编程:socket
@import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/c ...
随机推荐
- Django基础-02
django的介绍: Django 中提供了开发网站经常用到的模块,常见的代码都为你写好了,通过减少重复的代码,Django 使你能够专注于 web 应用上有 趣的关键性的东西.为了达到这个目标,Dj ...
- xcode: 解决 __nw_connection_get_connected_socket_block_invoke 1 Connection has no connected handler
Run -> Arguments -> Environment Variables -> Add -> Name: "OS_ACTIVITY_MODE", ...
- IIS7.5修改asp的文件上传限制方法
第一.IIS7.5修改asp的文件上传限制方法 1.打开IIS 2.打开面板中的应用程序开发 asp 3.找到最后的限制属性 4.修改其中的最大请求实体主体限制的值:默认为200000字节,等于195 ...
- h265文件分析(纯c解析代码)
参考链接: 1. HEVC码流解析 https://blog.csdn.net/CrystalShaw/article/details/80624804 2. HEVC编码结构:序列参数集SPS. ...
- python3.5+selenium3环境搭建
windows环境下的操作(例子中的浏览器以火狐浏览器为例,IE和谷歌与此浏览器同理): 准备工具如下: 下载python[python开发环境]:http://python.org/getit/ 下 ...
- spring cloud + spring boot + springmvc+mybatis分布式微服务云架构
做一个微服务架构需要的技术整理: View: H5.Vue.js.Spring Tag.React.angularJs Spring Boot/Spring Cloud:Zuul.Ribbon.Fei ...
- complex类的定义和实现
#include<iostream> #include<cmath> using namespace std; class complex { public: complex( ...
- Excel身份证验证,身份证校验公式
=IF(LEN(Q4)=0,"空",IF(LEN(Q4)=15,"老号",IF(LEN(Q4)<>18,"位数不对",IF(CH ...
- [转载]一个高效简洁的Aseprite to Unity导入工具
原文链接 https://zhuanlan.zhihu.com/p/28644268 期待原作者上传至AssetStore. 今天,我的第一个 Unity 插件 MetaSprite 正式发布了它的 ...
- html+css+javascript之间的关系与作用
三者间的关系 一个基本的网站包含很多个网页,一个网页由html, css和javascript组成. html是主体,装载各种dom元素:css用来装饰dom元素:javascript控制dom元素. ...