Day34

Socket

基於TCP的socket

client端服務器

import socket
sk=sk.socket.socket()
sk.connect(('127.0.0.1',9000))
while True:
    inp=input(">>>")
    sk.send(inp.encode('utf-8'))
    if inp=='q':break
    ret=sk.recv(1024).decode('utf-8')
    if ret=='q':break
    print(ret)
sk.close()
View Code

server端socket

import socket
sk=sk.socket.socket()
sk.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEDDR,1)
sk.bind(('127.0.0.1',9000))
sk.listen()        #參數n表示同一時間能夠有n個連接等待與server端通訊
while True:
    conn,addr=sk.accept()
    while True:
        ret=conn.recv(1024).decode('utf-8')
        if ret=='q':break
        print(ret)
        inp=input('>>>')
        conn.send(inp.encode('utf-8'))
        if inp=='q':break
    conn.close()
sk.close()
# tcp協議適用於 文件的上傳和下載 發送郵件 發送重要的文件
# 每和一個客戶端創建連接 都會在本身的操做系統上佔用一個資源
# 同一時間 只能 和一個客戶端通訊
View Code

基於UDP的socket

client端tcp

import socket
sk=socket.socket(type=socket.SOCK_DGRAM)
name=input('name:')
while True:
    inp=input('>>>')
    sk.sendto(('%s:%s'%(name,inp)).encode('utf-8'),('127.0.0.1',9090))
    msg,addr=sk.recvfrom(1024)
    print(msg.decode('utf-8'))
sk.close()
View Code

server端ide

import socket
lst={'egon':'\033[1;31m','yuan':'\033[1;34m'}
sk=socket.socket(type=socket_DGRAM)
sk.bind(('127.0.0.1',9090))
while True:
    msg,client_addr=sk.recvfrom(1024)
    name,msg=msg.decode('utf-8').spilt(':')
    color=lst.get(name.strip(),'')
    print('%s%s\033[0m'%(color,msg.decode('utf-8')))
    inp=input('>>>')
    sk.sendto(inp.encode('utf-8'),client_addr)
sk.close()
View Code

UDP進階

mysocketspa

from socket import *
class Mysocket(socket):
    def __init__(self,coding='utf-8'):
        super().__init__(type=SOCK_DGRAM)
        self.coding=coding
    def my_recv(self,num):
        msg,addr=self.recvfrom(num)
        return msg.decode(self.coding),addr
    def my_send(self,msg,addr):
        return self.sendto(msg.encode(self.coding),addr)
View Code

client端操作系統

from mysocket import Mysocket

sk = Mysocket()
while True:
    inp = input('>>>')
    if inp == 'q':break
    sk.my_send(inp,('127.0.0.1',9090))
    msg,addr = sk.my_recv(1024)
    if msg == 'q':break
    print(msg)

sk.close()
View Code

server端code

from mysocket import Mysocket

sk = Mysocket()
sk.bind(('127.0.0.1',9090))
while True:
    msg,client_addr= sk.my_recv(1024)   # udp協議不用創建連接
    print(msg)
    inp = input('>>>')
    sk.my_send(inp,client_addr)
sk.close()
View Code

時間同步

client端server

import time
import socket
sk=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()
View Code

server端blog

# 時間同步服務
# udp協議完成的
# 四、5 臺機器
# 00:00 從一個文件裏 讀一些數據 明天的搜索
# 在一個機房裏 有一臺標準時間的服務器
# 機房裏全部的機器 都每隔一段時間 就去請求這臺服務器 來獲取一個標準時間
import time
import socket
sk=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()
View Code
相關文章
相關標籤/搜索