PythonのSocketソケット

2662 ワード

Socketの紹介
定義:TCPはホストのIPアドレスにホストのポート番号を加えてTCP接続の端点とし、この端点をソケットまたはソケットと呼ぶ.
接続使用プロトコル(TCP/UDP)、ローカルホストのIPアドレス、ローカルプロセスのプロトコルポート、リモートホストのIPアドレス、リモートプロセスのプロトコルポートを含む.
役割:通信プロセスを実現するために確立された通信パイプは、クライアントとサーバ側の通信プロセスを真実に表し、双方のプロセスはsocketを通じて通信し、通信のルールは指定されたプロトコルを採用する.Socketを通じて、TCP/IPプロトコルを使用することができます.
 
アプリケーション層がトランスポート層を介してデータ通信を行う場合、TCPは同時に複数のアプリケーションプロセスに同時サービスを提供するという問題に直面する.複数のTCP接続または複数のアプリケーションプロセスは、同じTCPプロトコルポートを介してデータを転送する必要がある場合があります.異なるアプリケーションプロセスと接続を区別するために、多くのコンピュータオペレーティングシステムは、アプリケーションとTCP/IPプロトコルとのインタラクションにソケットインタフェースを提供している.アプリケーション層と転送層はSocketインタフェースを通じて、異なるアプリケーションプロセスまたはネットワーク接続からの通信を区別し、データ転送の同時サービスを実現することができる.
PythonがTCPソケットを実現
#   
import socket
#  socket   
serverTcp = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#       
HOST = ''
POST = 6666
#     
serverTcp.bind((HOST,POST))
#       
serverTcp.listen(5)

while True:
    #       
    client,add = serverTcp.accept()
    print("    ------")
    #         
    data = client.recv(1024)
    print("        :" + data.decode('utf-8'))
    #        
    client.send('This is serverTcp'.encode('utf-8'))
    #    
    client.close()
#   
import socket
#  client   
clientTcp = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#       
HOST = socket.gethostname()
POST = 6666
#     
clientTcp.connect((HOST,POST))

while True:
    #      
    data = input("         :")
    #    
    clientTcp.send(data.encode('utf-8'))
    #       
    info = clientTcp.recv(1024)
    print("        :"+info.decode('utf-8'))
    clientTcp.close()

サービス・エンドを実行してからクライアントを実行
PythonがUDPソケットを実現
#   
import socket
#  socket   
serverUdp = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
#       
HOST = ''
POST = 9999
#    
serverUdp.bind((HOST,POST))


while True:
    #       
    data,add = serverUdp.recvfrom(1024)
    print("        :"+data.decode('utf-8'))
    #        
    serverUdp.sendto("This is Server".encode('utf-8'),add)
#   
import socket
#  socket   
clientUdp = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
#        
HOST = socket.gethostname()
POST = 9999
#     
clientUdp.connect((HOST,POST))

while True:
    #      
    data = input("       :")
    #    
    clientUdp.sendall(data.encode('utf-8'))
    #       
    info = clientUdp.recv(1024)
    print("        :"+info.decode('utf-8'))

UDPの性質を利用して、簡単なチャット機能を実現することができ、ネットワークのないローカルエリアネットワークに適用することができる.サービス側とクライアント側のHOSTと送信方式は自分で改造できる.