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应该是能够一直 ...
随机推荐
- SMAP数据产品介绍与下载方法
1 SMAP(Soil Moisture Active and Passive)数据介绍 SMAP baseline science data products在下面的表格中展示,这些数据产品可以从两 ...
- WebStorm 2018.2安装激活教程
1.下载解压,得到jetbrains webstorm 2018.2主程序,破解文件和中文语言包: 2.运行“WebStorm-2018.2.exe”开始安装,默认安装目录[C:\Program Fi ...
- 综合练习2 设置访问权限,Easy-IP访问外网,内外网访问
实验拓扑图: 实验要求: 1.pc.路由.交换基本配置,vlan间路由互通. 2.vlan20.vlan30可以访问FTP,VLAN10不允许访问FTP. 3.AR1通过easy-ip方式实现私网地址 ...
- activate-power-mode安装与设置
Window-->activate-power-mode-->去掉combo/shake,其他三个全勾上,现在用起来就很爽了,赶紧体验吧.
- [转帖]Linux系统下x86和ARM的区别有哪些?
Linux系统下x86和ARM的区别有哪些? https://www.cnblogs.com/alantu2018/p/9209143.html 其实界限 越来越小了.. 问题: 最近在用三星的一款i ...
- 华为S5700系列交换机配置文件导出、导入
一.导出 配置用户名密码,使能ftp ftp server enable aaa local-user putty password cipher putty123 local-user putty ...
- Vue中常用知识点demo
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="utf-8& ...
- ORACLE 的前后台进程
关于oracle用户进程,服务进程,后台进程 用户进程(User Process) 是一个需要与Oracle Server交互的程序 运行于客户端 当用户运行某个工具或应用程序(如SQL*Plus)时 ...
- 利用Python进行数据分析_Pandas_数据结构
申明:本系列文章是自己在学习<利用Python进行数据分析>这本书的过程中,为了方便后期自己巩固知识而整理. 首先,需要导入pandas库的Series和DataFrame In [21] ...
- Power BI学习
常见用途: 1.连接数据 2.转换和清洗该数据,以创建数据模型 3.创建视觉对象,如提供数据的可视化表示形式的图表或图形 4.在一个或者多个报表页上创建作为视觉对象集合的报表 5.使用Power BI ...