socket 编程的一些应用例子
1、#传输文件的例子
import socket
from socket import *
import os
import requests
import time,socketserver,struct,os,_thread
def conn_thread(conn,addr):
while 1:
try:
conn.settimeout(600)
fileinfo_size=struct.calcsize('30sl')
buf=conn.recv(fileinfo_size)
if buf:
filename,filesize=struct.unpack('30sl',buf)
filename_f=filename.decode().strip('\00')
filenewname=os.path.join('e:\\',os.path.basename(filename_f))
print('文件名称:%s,文件大小:%s'%(filenewname,filesize))
recvd_size=0
file=open(filenewname,'wb')
print('开始传输文件内容。。。') while not recvd_size==filesize:
if filesize-recvd_size>1024:
rdata=conn.recv(1024)
recvd_size+=len(rdata)
else:
rdata=conn.recv(filesize-recvd_size)
recvd_size=filesize
print('type(rdata):',type(rdata))
file.write(rdata)
file.close()
print('receive done') except socket.timeout:
conn.close() while 1:
sk=socket()
addr=('127.0.0.1',9999)
sk.bind(addr)
sk.listen(3)
print('开始进入监听状态:')
conn,addr=sk.accept()
print('连接来自:',addr)
#t=threading.Thread(target=conn_thread,args=(conn,addr))
#t.start()
_thread.start_new_thread(conn_thread,(conn,addr))
sk.close()
client 文件传输客户端代码:
from socket import *
import os addr=('127.0.0.1',9999)
#addr=('39.106.41.11',9999)
sk=socket(AF_INET,SOCK_STREAM)
sk.connect(addr) #文件传输客户端 import os,struct
#while 1:
filepath=input('请输入要传输的文件路劲:')
print(type(filepath))
print(len(filepath.encode()))
if os.path.isfile(filepath):
fhead=struct.pack('30sl',filepath.encode(),os.stat(filepath).st_size)
print('文件大小为:',os.stat(filepath).st_size)
sk.send(fhead)
print('文件路径:',filepath) fp=open(filepath,'rb')
while 1:
filedata=fp.read(1024)
if not filedata:
break
sk.send(filedata)
fp.close()
print('传输成功!')
sk.close()
2、传输系统可执行的命令,服务端执行完成,返回客户端执行结果
server端:
import socket
from socket import *
import os
import requests def get(url):
return requests.get(url) sk=socket()
addr=('127.0.0.1',9999)
sk.bind(addr)
sk.listen(3) while 1:
print('连接开始了。。。。') conn,addr=sk.accept()
print('来自客户端:',addr) data=conn.recv(1024).decode()
print(data) com,pram=data.split() #result=eval("requests.get('"+data+"')")
#result=requests.get(data) #result=eval(com+'('+'"'+pram+'"'+')')
result=eval(com)(pram)
conn.sendall(result.text[:1024].encode()) #注意一定要text,否则会卡在这里 conn.close()
sk.close()
client 客户端传输命令:
from socket import *
import os addr=('127.0.0.1',9999) sk=socket(AF_INET,SOCK_STREAM)
sk.connect(addr) data='get http://www.sohu.com'
sk.send(data.encode())
print(sk.recv(1024).decode()) sk.close()
socket 编程的一些应用例子的更多相关文章
- socket编程——一个简单的例子
从一个简单的使用TCP例子开始socket编程,其基本步骤如下: server client ++++ ...
- socket编程 —— 非阻塞socket (转)---例子已上传至文件中
在上一篇文章 <socket编程——一个简单的例子> http://blog.csdn.net/wind19/archive/2011/01/21/6156339.aspx 中写了一个简单 ...
- 基于MFC的socket编程
网络编程 1.windows 套接字编程(开放的网络编程接口)添加头文件#include<windows.h> 2.套接字及其分类 socket分为两种:(1)数据报socket:无连接套 ...
- java socket编程开发简单例子 与 nio非阻塞通道
基本socket编程 1.以下只是简单例子,没有用多线程处理,只能一发一收(由于scan.nextLine()线程会进入等待状态),使用时可以根据具体项目功能进行优化处理 2.以下代码使用了1.8新特 ...
- [转] 3个学习Socket编程的简单例子:TCP Server/Client, Select
以前都是采用ACE的编写网络应用,最近由于工作需要,需要直接只用socket接口编写CS的代码,重新学习这方面的知识,给出自己所用到的3个简单例子,都是拷贝别人的程序.如果你能完全理解这3个例子,估计 ...
- Windows下C语言的Socket编程例子(TCP和UDP)
原文:Windows下C语言的Socket编程例子(TCP和UDP) 刚刚学windows编程,所以想写学习笔记,这是一个简单的Socket程序例子,开发环境是vc6: 首先是TCP server端: ...
- 一个linux下socket编程的例子,client连server
关于socket编程,以下文章写得比较好:http://www.cnblogs.com/xudong-bupt/archive/2013/12/29/3483059.html 1. accept()函 ...
- Linux socket编程示例(最简单的TCP和UDP两个例子)
一.socket编程 网络功能是Uinux/Linux的一个重要特点,有着悠久的历史,因此有一个非常固定的编程套路. 基于TCP的网络编程: 基于连接, 在交互过程中, 服务器和客户端要保持连接, 不 ...
- Linux下的C Socket编程 -- server端的继续研究
Linux下的C Socket编程(四) 延长server的生命周期 在前面的一个个例子中,server在处理完一个连接后便会立即结束掉自己,然而这种server并不科学啊,server应该是能够一直 ...
随机推荐
- kubespray部署k8s
0.把外网的/usr/local/bin/*拷过来覆盖 1.把部署好的集群的 calicoctl cni-plugins-linux-amd64-v0.8.1.tgz kubeadm-v1.16.3- ...
- Java 面试 - 打印九九乘法口诀表
在Java面试过程中, 面试者经常会被要求手写代码或上机操作.一般来说,手写代码或上机操作,主要还是考察面试者的分析问题和解决问题的能力.打印九九乘法口诀无疑是非常基础的,那么如何实现呢?首先我们先来 ...
- Elasticsearch 常用配置参数总结
# ---------------------------------- Cluster ----------------------------------- # Use a descriptive ...
- Windows用Eclipse来开发hadoop的WordCount的helloworld
[学习笔记] 2.Win7用Eclipse来开发hadoop的WordCount的helloworld网上下载hadoop-eclipse-plugin-2.7.4.jar,将该jar包拷贝到Ecli ...
- Netty源码剖析-断开连接
参考文献:极客时间傅健老师的<Netty源码剖析与实战>Talk is cheap.show me the code! ----主线: ----源码: 在NioEventLoop的unsa ...
- Python3的内置函数介绍
Python3的官网链接:https://docs.python.org/3/library/functions.html?highlight=built#ascii 内置函数介绍 abs 绝对值函数 ...
- dict字典
dict字典 字典的概述 • 概述:使⽤键-值(key-value)⽅式存储. • key的特点: • 1.字典中的key必须是唯⼀的 • 2.key值必须是不可变的数据类型:字符串.元组.Numbe ...
- 20190705-Python数据驱动之DDT
DDT ddt 是第三方模块,需安装, pip install ddt DDT包含的装饰器 包含一个类装饰器@ddt和两个方法装饰器@data和@file_data 通常情况下,@data中的数据按照 ...
- SpringMVC 出现 406(Not Acceptable)
首先,需要清楚,http state 406代表什么意思: 406是HTTP协议状态码的一种,表示无法使用请求的特性来响应请求的网页.一般指客户端浏览器不接受所请求页面的MIME类型. 出现这样的错误 ...
- linux 添加硬盘找不到使用/sys/class/scsi_host/host/scan
添加磁盘到dg--首先通知存储管理员划分相应的盘到指定的机器,说明共享--扫描磁盘(两个节点执行)[root@testrac1 ~]# echo "- - -" > /sys ...