1.創建一個文件,文件的第一行寫入0,再創建20個任務線程,他們同時打開文件並將文件第一行讀出來,加1寫回去(將文件原有值覆蓋掉)請保證20個任務線程完成後,文件中的第一行一定是20! 2.完成一個cs架構程式,服務端一旦接受到客戶端請求文件路徑後,判斷此文件是否存在,如果存在,將文件內容發送給客戶 ...
1.創建一個文件,文件的第一行寫入0,再創建20個任務線程,他們同時打開文件並將文件第一行讀出來,加1寫回去(將文件原有值覆蓋掉)請保證20個任務線程完成後,文件中的第一行一定是20!
2.完成一個cs架構程式,服務端一旦接受到客戶端請求文件路徑後,判斷此文件是否存在,如果存在,將文件內容發送給客戶端,如果不存在,也請告知客戶端.
```
編程1:
from threading import Thread, Lock
from time import sleep
lock = Lock()
#f1 = open('./a.txt', mode='w')
#f1.write('0')
def thrjob():
try:
lock.acquire()
while True:
f2 = open('./a.txt', mode='r+')
rtext = f2.read(10)
if rtext == '':
# 讀到文件結束標誌EOF時,返回''
break
print(rtext, type(rtext))
rtext2 = int(rtext)
print(rtext2, type(rtext2))
rtext2 = rtext2 + 1
print(rtext2, type(rtext2))
f3 = open('./a.txt', mode='w')
rtext3 = str(rtext2)
f3.write(rtext3)
finally:
lock.release()
if __name__ == '__main__':
l = []
for i in range(20):
l.append(Thread(target=thrjob))
for i in range(20):
l[i].start()
#for i in range(20):
l[i].join()
print('main will be gone')
編程2:
伺服器端:
import socket
import os
sd = socket.socket(family=socket.AF_INET, type=socket.SOCK_STREAM)
sd.bind(('', 8889))
sd.listen(100)
while True:
try:
# 接聽 newsd 數據交換
newsd, raddr = sd.accept()
print("data from ip:{}, port:{}".format(*raddr))
# 收發消息
s = newsd.recv(1024)
s1 = s.decode()
print(s1)
print(os.path.exists(s1))
if os.path.exists(s1):
print('aaaa')
f1 = open(s1, mode='r+', encoding='utf-8')
while True:
rtext = f1.read(10000)
if rtext == '':
# 讀到文件結束標誌EOF時,返回''
break
print(rtext)
rtext1 = rtext.encode()
newsd.send(rtext1)
else:
s = '未找到'
s1 = s.encode()
newsd.send(s1)
except:
sd.close()
客戶端:
import socket
sd = socket.socket()
sd.connect(('192.168.152.1', 8889))
s = './a.txt'
s1 = s.encode()
sd.send(s1)
rtext1 = sd.recv(1024)
rtext = rtext1.decode()
print(rtext)
sd.close()
```
總的來說這幾天學的知識用到了io操作,線程,和套接字(socket)和一丟丟的os,將這些東西聯繫起來,編程1用類去完成會更好些,好多代碼框架還是看的老師的樣本,儘量自己記下來