#练习3:TCP协议+while循环
服务端:
import socket #socket模块
import sys
reload(sys)
sys.setdefaultencoding("utf-8")
HOST='127.0.0.1'
PORT=8085
s= socket.socket(socket.AF_INET,socket.SOCK_STREAM) #定义socket类型,网络通信,TCP
s.bind((HOST,PORT)) #套接字绑定的IP与端口
s.listen(1) #开始TCP监听,listen中的参数表示可以多少客户端来进行连接
while 1:
print u"开始连接"
conn,addr=s.accept() #接受TCP连接,并返回新的套接字与IP地址
print'Connected by',addr #输出客户端的IP地址
while 1:
data=conn.recv(1024) #把接收的数据实例化
print data
conn.sendall(u'从服务得到结果:'.encode("gbk")+data.upper())
conn.close() #关闭连接 客户端:
import sys
import socket
reload(sys)
sys.setdefaultencoding("utf-8")
HOST='127.0.0.1'
PORT=8085
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) #定义socket类型,网络通信,TCP
s.connect((HOST,PORT)) #要连接的IP与端口
while 1:
cmd=raw_input(u"向服务器发送命令:".encode("gbk")) #与人交互,输入命令
s.sendall(cmd) #把命令发送给对端
data=s.recv(1024) #把接收的数据定义为变量
print data #输出变量
s.close() #关闭连接 #练习4:TCP协议+while循环+异常捕获
服务端:
import socket #socket模块
import commands #执行系统命令模块
import sys
reload(sys)
sys.setdefaultencoding("utf-8")
HOST='127.0.0.1'
PORT=8086
s= socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#定义socket类型,网络通信,TCP
s.bind((HOST,PORT)) #套接字绑定的IP与端口
s.listen(5)
#开始TCP监听,listen中的参数表示可以多少客户端来进行连接
while 1:
print u"开始接收数据"
conn,addr=s.accept() #接受TCP连接,并返回新的套接字与IP地址
print'Connected by',addr #输出客户端的IP地址
while 1:
try:
data=conn.recv(1024) #把接收的数据实例化
print data
conn.sendall(u'服务返回结果'.encode("gbk")+data.upper())
except Exception:
conn.close() #关闭连接
break 客户端:
import socket
import sys
reload(sys)
sys.setdefaultencoding("utf-8")
HOST='127.0.0.1'
PORT=8086
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#定义socket类型,网络通信,TCP
s.connect((HOST,PORT)) #要连接的IP与端口
times=3
while times>0:
cmd=raw_input(u"向服务器发送命令:".encode("gbk")) #与人交互,输入命令
s.sendall(cmd) #把命令发送给对端
data=s.recv(1024) #把接收的数据定义为变量
print data #输出变量
times-=1
s.close() #关闭连接 #练习5:代码优化,发送多条
服务端:
import time
if __name__ == '__main__':
import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.bind(('localhost', 8009))
sock.listen(5)
while True:
print u"服务开始监听状态"
time.sleep(0.1)
connection,address = sock.accept()
while 1:
try:
connection.settimeout(5)
buf = connection.recv(1024)
print "got message from client:",buf
if buf == '':
print ""
connection.send(u'您做的操作是:选择1'.encode("gbk"))
elif buf == '':
connection.send(u'您做的操作是:选择2'.encode("gbk"))
elif buf == "close":
connection.send(u'您做的操作是:选择close'.encode("gbk"))
connection.close()
break
except socket.timeout:
print u'连接超时'
connection.close()
break
except Exception,e:
print e
connection.close()
break 客户端:
if __name__ == '__main__':
import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(('localhost', 8009))
import time
time.sleep(2)
sock.send('')
print sock.recv(1024)
sock.send('')
print sock.recv(1024)
sock.send('close')
print sock.recv(1024)
print "Done!"
sock.close() #练习6:传输+command命令
服务端:
import os
if __name__ == '__main__':
import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.bind(('localhost', 8001))
sock.listen(5)
while True:
connection,address = sock.accept()
try:
connection.settimeout(5)
command = connection.recv(1024)
print command
result=os.popen(command)
print result
print result.name
connection.send(result.name)
connection.send(result.read())
except socket.timeout:
print 'time out'
connection.close() 客户端:
if __name__ == '__main__':
import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(('localhost', 8001))
import time
time.sleep(2)
sock.send('ipconfig')
print "command name:",sock.recv(10)
print "command result:",sock.recv(1024)
sock.close() #练习7:socket传输文件
服务端:
import socket,os,time,struct,threading,SocketServer
host = '127.0.0.1'
port = 12307
sk = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 定义socket类型
sk.bind((host, port)) # 绑定需要监听的Ip和端口号,tuple格式
sk.listen(1) def conn_thread(connection, address):
while True:
try:
connection.settimeout(600)
fileinfo_size=struct.calcsize("128sl")
buf=connection.recv(fileinfo_size)
if buf:
filename,filesize=struct.unpack("20sl",buf)
filename_f=filename.strip("\00")
filenewname=os.path.join("e:\\test4\\", os.path.basename (filename_f))
print u"文件名称:%s,文件大小:%s" %(filenewname,filesize)
recvd_size=0
file=open(filenewname,"wb")
print u"开始传输文件内容"
while not recvd_size==filesize:
if filesize-recvd_size>1024:
rdata=connection.recv(1024)
recvd_size+=len(rdata)
else:
rdata=connection.recv(filesize-recvd_size)
recvd_size=filesize
file.write(rdata)
file.close()
print 'receive done'
# connection.close()
except socket.timeout:
connection.close() while True:
print u"开始进入监听状态"
connection,address=sk.accept()
thread = threading.Thread(target=conn_thread,args=(connection,address))
thread.start()
sk.close() 客户端:
import socket,os,struct
sk=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sk.connect(("127.0.0.1",12307))
while True:
filepath=raw_input("Please Enter chars:\r\n")
if os.path.isfile(filepath):
fhead=struct.pack("20sl",filepath,os.stat(filepath).st_size)
sk.send(fhead)
print u"文件路径:",filepath
f=open(filepath,"rb")
while True:
filedata=f.read(1024)
if not filedata:
break
sk.send(filedata)
f.close()
print "传输成功"
#sk.close() #练习8:实现多连接
import socket
HOST = '127.0.0.1' # 本地localhost
PORT = 50008
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.bind((HOST, PORT))
s.listen(5)
while True:
print u"开始进入监听状态"
conn,addr = s.accept()#接收连接
print "开始接收连接从: ",addr
while True:
try:
data = conn.recv(1024)
if not data:
break
print "收到",data
msg = u"这是一个多进程服务测试"
conn.sendall(msg.encode("gbk"))
except socket.error:
break
conn.close()

【Python】socket编程-2的更多相关文章

  1. Python Socket 编程——聊天室示例程序

    上一篇 我们学习了简单的 Python TCP Socket 编程,通过分别写服务端和客户端的代码了解基本的 Python Socket 编程模型.本文再通过一个例子来加强一下对 Socket 编程的 ...

  2. python/socket编程之粘包

    python/socket编程之粘包 粘包 只有TCP有粘包现象,UDP永远不会粘包. 首先需要掌握一个socket收发消息的原理 发送端可以是1k,1k的发送数据而接受端的应用程序可以2k,2k的提 ...

  3. PYTHON SOCKET编程简介

    原文地址: PYTHON SOCKET编程详细介绍   Python 提供了两个基本的 socket 模块. 第一个是 Socket,它提供了标准的 BSD Sockets API. 第二个是 Soc ...

  4. python socket编程笔记

    用python实现一个简单的socket网络聊天通讯 (Linux --py2.7平台与windows--py3.6平台) 人生苦短之我用Python篇(socket编程) python之路 sock ...

  5. [Python_7] Python Socket 编程

    0. 说明 Python Socket 编程 1. TCP 协议 [TCP Server] 通过 netstat -ano 查看端口是否开启 # -*-coding:utf-8-*- "&q ...

  6. Python Socket 编程示例 Echo Server

    简评:我们已经从「Python Socket 编程概览」了解了 socket API 的概述以及客户端和服务器的通信方式,接下来让我们创建第一个客户端和服务器,我们将从一个简单的实现开始,服务器将简单 ...

  7. Python Socket 编程——聊天室演示样例程序

    上一篇 我们学习了简单的 Python TCP Socket 编程,通过分别写服务端和client的代码了解主要的 Python Socket 编程模型.本文再通过一个样例来加强一下对 Socket ...

  8. python socket编程入门(编写server实例)+send 与sendall的区别与使用方法

    python 编写server的步骤: 1. 第一步是创建socket对象.调用socket构造函数.如: socket = socket.socket( family, type ) family参 ...

  9. 第九章:Python高级编程-Python socket编程

    第九章:Python高级编程-Python socket编程 Python3高级核心技术97讲 笔记 9.1 弄懂HTTP.Socket.TCP这几个概念 Socket为我们封装好了协议 9.2 cl ...

  10. python socket编程详细介绍

    Python 提供了两个基本的 socket 模块. 第一个是 Socket,它提供了标准的 BSD Sockets API. 第二个是 SocketServer, 它提供了服务器中心类,可以简化网络 ...

随机推荐

  1. python-爬虫-Beautifulsoup模块

    一 介绍 Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式.Beautiful Soup会帮你 ...

  2. SET构造函数

    set<int,greater<int>> S; 可以在第二个参数位置设置比较模板,效果和sort类似,less表示升序,greater表示降序.这样做的好处是为了方便应对题目 ...

  3. Oracle11g温习-第十八章:role管理

    2013年4月27日 星期六 10:52 role 的功能:简化用户的权限管理 建立角色——给角色授权——将角色授予用户/角色 2.查看系统建立的role SYS @ prod >  selec ...

  4. Leetcode 949. 给定数字能组成的最大时间

    949. 给定数字能组成的最大时间  显示英文描述 我的提交返回竞赛   用户通过次数125 用户尝试次数213 通过次数127 提交次数774 题目难度Easy 给定一个由 4 位数字组成的数组,返 ...

  5. Shell里面获取路径的方式

    1. $0 #!/bin/sh echo $0 2.shFile=$(readlink -f $0) #!/bin/sh shFile=$() shDir=$(dirname ${shFile})ec ...

  6. win10下使用python访问vmbox中的redis

    了解到redis没有windows的官方支持,所以在vmbox中的ubuntu装了redis#在ubuntu中 #搜索redis相关软件信息 apt-cache search ^redis #不清楚为 ...

  7. InnoDB存储引擎介绍-(7) Innodb数据页结构

    数据页结构 File Header 总共38 Bytes,记录页的头信息 名称 大小(Bytes) 描述 FIL_PAGE_SPACE 4 该页的checksum值 FIL_PAGE_OFFSET 4 ...

  8. Redis 系列之CentOS下Redis的安装

    前言 安装Redis需要知道自己需要哪个版本,有针对性的安装,比如如果需要redis GEO这个地理集合的特性,那么redis版本就不能低于3.2版本,由于这个特性是3.2版本才有的.另外需要注意的是 ...

  9. [转载]完全理解Python迭代对象、迭代器、生成器

    译文地址:liuzhijun 在了解Python的数据结构时,容器(container).可迭代对象(iterable).迭代器(iterator).生成器(generator).列表/集合/字典推导 ...

  10. Qt一步一步实现插件通信(附源码)

      前一章已经实现了主程序调用加载插件功能,这一章描述主程序和插件间通信功能 说道Qt的通信必须要了解信号和槽的机制原理,这里不做论述,不清楚的同学去看看信号和槽机制 不废话直接上步骤,在上一章的基础 ...