import socketsk = socket.socket()sk.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)'''加上這句話,就可以解決警示:address already in use.我們可以重用ip了,寫在bind()之前,'''sk.bind(('127.0.0.1',9000))
#udp版,伺服器用戶端模型#1.不用建立串連,即伺服器端沒有listen(),accept(),用戶端沒有connect()#2.發送和接收方法分別是sendto()和recvfrom()#server.py的代碼import socketsk = socket.socket(type=socket.SOCK_DGRAM)sk.bind(('127.0.0.1',9090))while True: msg,client_addr= sk.recvfrom(1024) print(msg.decode('utf-8')) inp = input('>>>') sk.sendto(inp.encode('utf-8'),client_addr)sk.close()#client.py的代碼,import socketsk = socket.socket(type=socket.SOCK_DGRAM)while True: inp = input('>>>') sk.sendto(inp.encode('utf-8'),('127.0.0.1',9090)) msg,addr = sk.recvfrom(1024) print(msg.decode('utf-8'))sk.close()
'''#下面是自己手打的版本,需要弄清楚包匯入的使用,#1.關於匯入import socket和from socket import *的區別, #前者匯入的是模組socket,因此繼承的話需要class xx(socket.socket): #後者是匯入模組中的所有方法,因此繼承的話直接class xx(socket):#2.關於繼承已有類,實現更適合自己類, #你要弄清,你是在原有類的基礎之上,添加一些新的屬性或方法,有些情況是重寫父類的方法,關於__repr__()該怎麼想?? #這個一定得看代碼!!!!!!!#3.函數返回多個參數,是以元組的形式返回的,#4.關於下面這段代碼,我開始是忘記寫return這個關鍵字了,雖然沒有報錯. #我開始沒注意sendto()的傳回值,原來是發送的字元數, def mySendTo(self, msg, addr): return self.sendto( msg, addr)#client.pyfrom practice.mysocket import mysocketsk = mysocket()while True: info = input('>>>') sk.mySendTo(info.encode('utf-8'),('127.0.0.1',9999))sk.close()#server.pyfrom practice.mysocket import mysocketsk = mysocket()sk.bind(('127.0.0.1',9999))while True: msg, addr = sk.myRecvFromm() print('{}發來資訊:{}'.format(addr, msg))sk.close()#mysocket.pyimport socketclass mysocket(socket.socket): def __init__(self,coding='utf-8'): self.coding = coding super().__init__(type=socket.SOCK_DGRAM) def myRecvFromm(self): msg, addr = self.recvfrom(1024) return msg.decode(self.coding), addr def mySendTo(self, msg, addr): return self.sendto( msg, addr)'''
# 時間同步服務:用戶端發送希望的時間格式,伺服器根據這個格式發送對應格式的時間,#1.2018/05/04 16:44:51對應的時間格式為:%Y/%m/%d %H:%M:%S#2.time.strftime(),這個函數參數為時間格式和時間,若沒有傳入時間,則預設是當地的目前時間.#client.pyimport timeimport socketsk = socket.socket(type=socket.SOCK_DGRAM)while True: sk.sendto('%Y/%m/%d %H:%M:%S'.encode('utf-8'),('127.0.0.1',9090)) ret,addr = sk.recvfrom(1024) print(ret.decode('utf-8')) time.sleep(1)sk.close()#server.pyimport timeimport socketsk = socket.socket(type = socket.SOCK_DGRAM)sk.bind(('127.0.0.1',9090))while True: msg,addr = sk.recvfrom(1024) sk.sendto(time.strftime(msg.decode('utf-8')).encode('utf-8'),addr)sk.close()