トップダウンのコンピュータネットワークソケットプログラミングの仕事の章

最初の3オンラインは、最終的には自分で考えるか、収穫の多くを持って正直に言うと、自分自身少し作られています。

最後の1を見てください:

マルチスレッドWebプロキシサーバー

サーバー:フィギュア、マルチスレッド、注意serverSocket.accept()私たちは、TCP接続を使用しているため、ループ内で記述することはできませんが確立され、クライアントが要求を送信することができ、ループ内で書き込み、接続を確立するのに十分である、その後、開いて、接続を再確立する必要があり、

ソケット*からのインポート
インポートスレッディングは、
「」「...セーブすることを忘れ
HTTP要求を受け入れて、情報を返し、同時に複数のリクエストを受信することが可能である
」「」
するserverPort = 12000 
ServerSocketを= ソケット(AF_INET、SOCK_STREAM) ServerSocket.bind((「localhostの" 、するserverPort)) serverSocket.listen(5。)DEF、Connect()の:.印刷(threading.current_thread()のgetName()、 "...データの受信を待機" )connectSocket、住所= serverSocket.accept()ながら、真: = connectSocket.recvメッセージ(1024 ).decode()プリント(threading.current_thread()のgetName()、 "受信"、住所、 "データ" 、メッセージ)connectSocket.send(message.upper()符号化( ))#マルチスレッド動作機能を接続=スレッド範囲で[] I(5。 ):threads.append(threading.Thread(対象=
接続))スレッド[I] .start()

クライアント:あなたは、常にデータを送信するための接続を確立することができます

*からのインポートソケット

ClientSocket = ソケット(AF_INET、SOCK_STREAM)
ClientSocket.connect(( 'localhostの'、12000 ))#アナログブラウザは要求を送信
:真 fileNameに= INPUT( "リソース名:"  ClientSocket.send(fileName.encodeを()) データ= ClientSocket.recv(1024 )プリント( "データ受信" 、data.decode())を開くと( "response2.txt"、MODE = "A +"、エンコード= "UTF-を8")AS F :f.write(data.decode())

結果は、オープン複数のクライアントを実行して表示され、情報を送信し続けることができます。

 

 

 

 

 

 

 

 

 しかし、欠陥があり、接続が確立されると、それが唯一のクライアントが切断した後、通信できることで、サーバがこのクライアントへの次の接続を待ち続け、私たちは次のような戦略を取ることができます切断されません。

1.場合は、クライアント要求されたリソース名+ xxxの場合、切断

サーバ接続2.検出が切断され、切断状態が受け入れ再開されます

以下のコードを変更し、あなたが問題を解決することができます入力が切断されたときに実際には、切断、追加、あなたがサービスのための5の最大を形成することができ、クライアントができるように、クライアント、クライアントとの緊密なサーバー側の接続を閉じますinとoutさまよいます。

ソケット*からのインポート
インポートスレッディングは、
「」「
...セーブすることを忘れ
HTTP要求を受け入れて、情報を返し、同時に複数のリクエストを受信することが可能である
」「」
するserverPort = 12000 
ServerSocketを=ソケット(AF_INET、SOCK_STREAM)
ServerSocket.bind((「localhostの」、するserverPort))
serverSocket.listen(5)。
DEF、Connect()の:
    。印刷(threading.current_thread()のgetName()、 "...データの受信を待機")
    connectSocket、住所= serverSocket.accept()
    ながら、真:
        = connectSocket.recvメッセージ(1024).decode()
        プリント(threading.current_thread()のgetName()、 "受信"、住所、 "データ"、メッセージ)
        メッセージIF == "カット":#切断------------ 
            connectSocket。近い() 
            ブレーク
        (message.upper()エンコード())connectSocket.send 

#多线程运行函数接続
[] =スレッド
(5)の範囲でiについて:
    threads.append(threading.Thread(目標=接続))
    スレッド[I]。開始()

クライアント

 
 
*からのインポートソケット

ClientSocket =ソケット(AF_INET、SOCK_STREAM)
ClientSocket.connect(( 'localhostの'、12000))#アナログブラウザは、リクエスト送信

:しばらく真
fileNameに= INPUT( "リソース名:")
ClientSocket.send(fileName.encodeを())
データ= ClientSocket.recv(1024)
fileNameにIF == "カット" #---------切断
ClientSocket.close()
BREAKの
印刷( "受信データ"、data.decode( ))
を開く( "response2.txt"、MODE = "A +"、エンコード= "UTF-8")F ASと:
f.write(data.decode())
 

 

Webサーバー

一時的に送信されるHTTPパケットを構成していない、単に2つのプログラムが対話実行

Server.py

""""
任务说明:一个简单的web服务器,有以下功能
1.使用TCP协议进行连接
2.接受http请求
3.对请求的文件进行响应
4.创建由请求的文件组成的Http响应报文
5.不存在文件则返回404
"""
from socket import *
# 创建tcp socket
tcpSocket = socket(AF_INET, SOCK_STREAM)
# 绑定地址
tcpSocket.bind(("127.0.0.1", 9999))
# 开始监听
tcpSocket.listen(5)
while True:
    print("等待连接中....")
    tcpConnect, adrr = tcpSocket.accept()
    print("接受到了来自:", adrr, "的数据")
    while True:
        try:
            data = tcpConnect.recv(1024)
            if not data:
                break
            print("接收到了数据", data)
            f = open(data, encoding="utf-8")
            result = f.read()
            # header = 'HTTP/1.1 200 OK\r\n\r\n'
            #tcpConnect.send(header.encode())
            tcpConnect.send(result.encode())
        except FileNotFoundError as e:
            tcpConnect.send("资源不存在".encode())
    tcpConnect.close()
    print("连接结束")

Client.py

from socket import *

ClientSocket = socket(AF_INET, SOCK_STREAM)
ClientSocket.connect(('localhost', 9999))     # 模拟浏览器发送请求


while True:
    fileName = input("资源名:")
    ClientSocket.send(fileName.encode())
    data = ClientSocket.recv(1024)
    print("接收到数据", data.decode())
    with open("response2.txt", mode="a+", encoding="utf-8") as f:
        f.write(data.decode())

运行结果如下,可以看到请求的文件存在时就返回文件内容,不存在就返回提示信息

Client:

 

 

Server

 UDP,PING程序:

emmmm,这个不写了,网上可以搜索到,,

邮件客户:

这个参考菜鸟教程的,

import smtplib
from email.mime.text import MIMEText
from email.header import Header

mail_host = 'smtp.qq.com'   # 中转服务器
mail_user = '[email protected]'
mail_pass = 'xzfwjkhtpsrydjdh'

sender = '[email protected]'       # 发送方
receivers = ['[email protected]']       # 接收方

message = MIMEText('python 测试', 'plain', 'utf-8')
message['From'] = Header("ennio", 'utf-8')
message['To'] = Header("测试", 'utf-8')

subject = 'python smtp 测试'
message['Subject'] = Header(subject, 'utf-8')

try:
    smtpObj = smtplib.SMTP()
    smtpObj.connect(mail_host, 25)  # 建立连接
    smtpObj.login(mail_user, mail_pass) # 登陆授权
    smtpObj.sendmail(sender, receivers, message.as_string())  # 发送邮件
    print("发送成功")
    smtpObj.close()
except smtplib.SMTPException:
    print("Error......")
    smtpObj.close()

 

おすすめ

転載: www.cnblogs.com/eenio/p/11494167.html