#练习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 == '1': print "1" connection.send(u'您做的操作是:选择1'.encode("gbk")) elif buf == '2': 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('2') print sock.recv(1024) sock.send('1') 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()