1.4socket服務器打印信息的四種不同方式()
阿新 • • 發佈:2017-09-26
span 綁定 col tip ner 1.4 一次 +++ soc
方式一
socker 服務器
# -*- coding: utf-8 -*-
import sys,os,multiprocessing
from socket import *
serverHost = ‘localhost‘ serverPort = 50007
def initListenerSocket(port=port): sock = socket(AF_INET,SOCK_STREAM) #創建TCP對象 sock.bind((‘‘,port)) #綁定端口 sock.listen(5) #允許5個請求連接 conn,addr = sock.accept() #返回socket對象 return conn def server1(): mypid = os.getpid() #獲取系統進程 conn = initListenerSocket() file = conn.makefile(‘r‘) #file interface wrapper for i inrange(3): data = file.readline().rstrip() #讀取之前客戶端寫入file的值 print(‘Sever %s:%s‘%(mypid,data)) #當makefile(‘r‘)中為‘r‘時候,此時顯示的是print值 server1()
socket 客戶端
# -*- coding: utf-8 -*-
import sys,os,multiprocessing
from socket import *
serverHost = ‘localhost‘ serverPort = 50007
def redirectOut(port=serverPort, host=serverHost): sock = socket(AF_INET, SOCK_STREAM) sock.connect((host, port)) file = sock.makefile(‘w‘) sys.stdout = file #此時sys.stdout指向file,原始的 sys.stdout 指向控制臺,如果把文件的對象的引用賦給 sys.stdout,那麽 print 調用的就是文件對象的 write 方法 return sock def client1(): mypid = os.getpid() redirectOut() for i in range(3): print(‘Client %s:%s+++++‘%(mypid,i)) #當makefile(‘w‘)中為‘w‘時候,此時print不能打印,print後為寫入file中的值 sys.stdout.flush() #每一次print都會輸入刷新 client1()
方式二
socker 服務器
# -*- coding: utf-8 -*- import sys,os,multiprocessing from socket import * serverHost = ‘localhost‘ serverPort = 50007 def initListenerSocket(port=port): sock = socket(AF_INET,SOCK_STREAM) #創建TCP對象 sock.bind((‘‘,port)) #綁定端口 sock.listen(5) #允許5個請求連接 conn,addr = sock.accept() #返回socket對象 return conn def server2(): mypid = os.getpid() conn = initListenerSocket() for i in range(3): conn.send((‘Sever %s:%s‘%(mypid,i)).encode()) #和下面的註釋功能一樣,但是下面不報EOF錯誤 # ofile = conn.makefile(‘w‘) # sys.stdout=ofile # print((‘Sever %s:%s‘%(mypid,i)).encode()) server2()
socker 客戶端
# -*- coding: utf-8 -*-
import sys,os,multiprocessing
from socket import *
serverHost = ‘localhost‘ serverPort = 50007
def redirectIn(port=serverPort, host=serverHost): sock = socket(AF_INET, SOCK_STREAM) sock.connect((host, port)) file = sock.makefile(‘r‘) sys.stdin = file return sock def client2(): mypid = os.getpid() redirectIn() for i in range(3): data = input() #input獲取的是服務器發送過來的內容 print(‘Client %s got [%s]‘%(mypid,data)) #打印信息,出現EOF錯誤,不知道為什麽 client2()
方式三
socker 服務器
# -*- coding: utf-8 -*- import sys,os,multiprocessing from socket import * serverHost = ‘localhost‘ serverPort = 50007 def initListenerSocket(port=port): sock = socket(AF_INET,SOCK_STREAM) #創建TCP對象 sock.bind((‘‘,port)) #綁定端口 sock.listen(5) #允許5個請求連接 conn,addr = sock.accept() #返回socket對象 return conn def server3(): mypid = os.getpid() conn = initListenerSocket() file = conn.makefile(‘r‘) #讀取之前客戶端寫入file的值 for i in range(3): data = file.readline().rstrip() conn.send((‘Server %s got[%s]\n‘%(mypid,data)).encode()) server3()
socker 客戶端
# -*- coding: utf-8 -*- import sys,os,multiprocessing from socket import * serverHost = ‘localhost‘ serverPort = 50007 def redirectBothAsClient(port=serverPort,host=serverHost): sock = socket(AF_INET,SOCK_STREAM) sock.connect((host,port)) ofile = sock.makefile(‘w‘) ifile = sock.makefile(‘r‘) sys.stdout = ofile sys.stdin = ifile return sock def client3(): mypid = os.getpid() redirectBothAsClient() for i in range(3): print(‘Client %s: %s‘%(mypid,i)) #寫入ofile,再傳到服務器 data = input() #再傳回來 sys.stderr.write(‘Client %s got [%s]\n‘%(mypid,data)) #打印出來,這裏不能用print打印 #print(‘Client %s got [%s]\n‘%(mypid,data)) client3()
方式四
socker 服務器
# -*- coding: utf-8 -*- import sys,os,multiprocessing from socket import * serverHost = ‘localhost‘ serverPort = 50007 def initListenerSocket(port=port): sock = socket(AF_INET,SOCK_STREAM) #創建TCP對象 sock.bind((‘‘,port)) #綁定端口 sock.listen(5) #允許5個請求連接 conn,addr = sock.accept() #返回socket對象 return conn def server5(): mypid = os.getpid() conn = initListenerSocket() file = conn.makefile(‘r‘) for i in range(3): conn.send((‘Server %s got[%s]\n‘ % (mypid,i)).encode()) data = file.readline().rstrip() print((‘Server %s got[%s]\n‘ % (mypid, data))) server5()
socker 客戶端
# -*- coding: utf-8 -*- import sys,os,multiprocessing from socket import * serverHost = ‘localhost‘ serverPort = 50007 def redirectBothAsClient(port=serverPort,host=serverHost): sock = socket(AF_INET,SOCK_STREAM) sock.connect((host,port)) ofile = sock.makefile(‘w‘) ifile = sock.makefile(‘r‘) sys.stdout = ofile sys.stdin = ifile return sock def client5(): mypid = os.getpid() s = redirectBothAsClient() for i in range(3): data = input() print(‘Client %s got [%s]\n‘ % (mypid, data)) sys.stdout.flush() #每一次print都會輸入刷新 client5()
1.4socket服務器打印信息的四種不同方式()