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 编程的一些应用例子的更多相关文章

  1. socket编程——一个简单的例子

    从一个简单的使用TCP例子开始socket编程,其基本步骤如下: server                                                  client ++++ ...

  2. socket编程 —— 非阻塞socket (转)---例子已上传至文件中

    在上一篇文章 <socket编程——一个简单的例子> http://blog.csdn.net/wind19/archive/2011/01/21/6156339.aspx 中写了一个简单 ...

  3. 基于MFC的socket编程

    网络编程 1.windows 套接字编程(开放的网络编程接口)添加头文件#include<windows.h> 2.套接字及其分类 socket分为两种:(1)数据报socket:无连接套 ...

  4. java socket编程开发简单例子 与 nio非阻塞通道

    基本socket编程 1.以下只是简单例子,没有用多线程处理,只能一发一收(由于scan.nextLine()线程会进入等待状态),使用时可以根据具体项目功能进行优化处理 2.以下代码使用了1.8新特 ...

  5. [转] 3个学习Socket编程的简单例子:TCP Server/Client, Select

    以前都是采用ACE的编写网络应用,最近由于工作需要,需要直接只用socket接口编写CS的代码,重新学习这方面的知识,给出自己所用到的3个简单例子,都是拷贝别人的程序.如果你能完全理解这3个例子,估计 ...

  6. Windows下C语言的Socket编程例子(TCP和UDP)

    原文:Windows下C语言的Socket编程例子(TCP和UDP) 刚刚学windows编程,所以想写学习笔记,这是一个简单的Socket程序例子,开发环境是vc6: 首先是TCP server端: ...

  7. 一个linux下socket编程的例子,client连server

    关于socket编程,以下文章写得比较好:http://www.cnblogs.com/xudong-bupt/archive/2013/12/29/3483059.html 1. accept()函 ...

  8. Linux socket编程示例(最简单的TCP和UDP两个例子)

    一.socket编程 网络功能是Uinux/Linux的一个重要特点,有着悠久的历史,因此有一个非常固定的编程套路. 基于TCP的网络编程: 基于连接, 在交互过程中, 服务器和客户端要保持连接, 不 ...

  9. Linux下的C Socket编程 -- server端的继续研究

    Linux下的C Socket编程(四) 延长server的生命周期 在前面的一个个例子中,server在处理完一个连接后便会立即结束掉自己,然而这种server并不科学啊,server应该是能够一直 ...

随机推荐

  1. charles 文件菜单总结

    本文参考:charles 文件菜单总结 一.file(文件菜单) 需要注意的是 "导入"和"导出"这个功能在和别人沟通的时候用, 比如你向第三方工具/类库开发人 ...

  2. VMware虚拟机中CentOS7的硬盘空间扩容

    查看centos7系统挂载点信息 扩展VMWare-centos7硬盘空间 对新增加的硬盘进行分区.格式化 添加新LVM到已有的LVM组,实现扩容 1.查看centos7系统挂载点信息 df -h查看 ...

  3. Turbine聚合https微服务

  4. Django 数据库

    一.操作数据库 Django配置连接数据库: 在操作数据库之前,首先先要连接数据库.这里我们以配置MySQL为例来讲解.Django连接数据库,不需要单独的创建一个连接对象.只需要在settings. ...

  5. jira使用一:如何给项目分组、sprint并行、禁止发送消息给atlassian

    问题一:如何设置多个sprint并行? 问题二: 如何分组显示 设置泳道,并快速过滤 问题3:添加所属产品? 管理员登录Jira后台设置-问题-自定义字段找到:所属产品,进入 配置 界面在配置界面中, ...

  6. 学习笔记:oracle学习二:oracle11g数据库sql*plus命令之数据库交互、设置运行环境

    目录 1.SQL*PLUS与数据库的交互 2.设置sql*plus运行环境 2.1 set命令简介 2.2 使用set命令设置运行环境 2.2.1 pagesize变量 2.2.2 NEWPAGE变量 ...

  7. service 方法和doGet、doPost方法的区别

    Service方法和doGet和doPost方法的区别service:     可以处理get/post方式的请求,如果servlet 中有service方法,会优先调用service方法进行处理do ...

  8. Available time

    Google Calendar, Outlook, iCal has been banned from your company! So an intrepid engineer has decide ...

  9. VC++单文档程序固定菜单栏和工具栏

    MainFrm.cpp框架类下,找到OnCreate方法 m_wndMenuBar.EnableDocking(CBRS_ALIGN_ANY); m_wndToolBar.EnableDocking( ...

  10. 【满k叉树】Perfect Tree

    题目描述 Given a positive integer k, we define a rooted tree to be k-perfect, if and only if it meets bo ...