#练习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. 关于linux中用vi新建立一个.c文件无法保存,显示E212错误的时候

    在ubuntu16.04环境下,用vi新键.c文件,怎么保存也不能 先按ESC  然后:  在后wq  可是显示文件212错误. 后来知道在建立.c的文件夹的权限不对.这里的权限用 ls -l来查看 ...

  2. Oracle PL/SQL语言函数、匿名语句及循环

    一.自定义函数 格式: create or replace function 函数名(参数名 参数类型...) return  返回值类型 as xx vachar2(20)              ...

  3. python-day97--git协同开发

    1.协同开发流程 - 在dev的基础上创建三个开发的分支 -每个人都在自己的分支中进行开发 -第一个人开发完成之后把review分支从云端版本库中拉下来 -将个人的分支与review分支合并(确保re ...

  4. zzw原创_oracle回收站相关操作知识

    1.查询回收站状态语句 select * from user_recyclebin order by droptime desc   2.还原回收站 FLASHBACK TABLE  << ...

  5. 更改pip源至国内镜像

    更改pip源至国内镜像   经常在使用Python的时候需要安装各种模块,而pip是很强大的模块安装工具,但是由于国外官方pypi经常被墙,导致不可用,所以我们最好是将自己使用的pip源更换一下,这样 ...

  6. java爬虫进阶 —— ip池使用,iframe嵌套,异步访问破解

    写之前稍微说一下我对爬与反爬关系的理解 一.什么是爬虫      爬虫英文是splider,也就是蜘蛛的意思,web网络爬虫系统的功能是下载网页数据,进行所需数据的采集.主体也就是根据开始的超链接,下 ...

  7. Java多线程中对CountDownLatch的使用

    CountDownLatch是一个非常实用的多线程控制工具类,称之为“倒计时器”,它允许一个或多个线程一直等待,直到其他线程的操作执行完后再执行.用给定的计数初始化CountDownLatch,其含义 ...

  8. system.setProperties

    System.setProperty("http.proxyHost", "localhost");System.setProperty("http. ...

  9. Win10系列:JavaScript访问文件和文件夹

    在实际开发中经常会遇到访问文件的情况,因此学习与文件有关的操作对程序开发很有帮助,关于文件操作的一些基本技术,在前面章节中有专门基于C#语言的详细讲解,本节主要介绍如何使用HTML5和JavaScri ...

  10. 【oracle】oracle REGEXP_SUBSTR分割字符串

    REGEXP_SUBSTR的使用:通过REGEXP_SUBSTR进行数据分割: , LEVEL, 'i') AS STR FROM DUAL CONNECT BY LEVEL <= LENGTH ...