python socketネットワークインタフェースプログラミング

2193 ワード

pythonは、TCP/UDP処理のためにsocketモジュールを呼び出すことができる.socketは、Unixスレッドで処理されるsocketと、TCP/IPプロトコルが上位層に提供される処理インタフェースとの異なるタイプを選択することができる.TCP/UDPは、いずれもsocketインタフェースを介して対応するsocketオブジェクトを確立し、インタフェースパラメータ処理タイプにSOCK_があることを示すDGRAMとSOCK_STREAMの違いは,UDPは無接続であり,TCPは接続向けであるため,処理中に若干の違いがあり,TCP処理時にはlistenインタフェースを介してTCPの握手過程の発生を傍受する必要がある.
UDPサーバおよびクライアントプログラムの例
サービスエンドプログラム
#!/usr/bin/python3.6
import socket

BUFFER_SIZE = 1024
TARGET_ADDR = '' #       
TARGET_PORT = 60000
TARGET = (TARGET_ADDR,TARGET_PORT)

#AF_INET       socket、SOCK_DGRAM  UDP    
ss = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
ss.bind(TARGET) #     IP      

while True:
    data,addrRsv = ss.recvfrom(BUFFER_SIZE)
    if not data:
        sys.exit(0)
    else:
        print(data)

ss.close()

クライアントプログラム
#!/usr/bin/python3.6
import socket

ss = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
BUFFER_SIZE = 1024
TARGET_ADDR = 'IP address'
TARGET_PORT = 60000
TARGET = (TARGET_ADDR,TARGET_PORT)

while True:
    aa = input('> ') #      
    if not aa:
        break
    #        ,          IP      
    ss.sendto(bytes(aa,'utf-8'),TARGET)
    data,addrRsv = ss.recvfrom(BUFFER_SIZE)
    if not data:
        break
    else:
        print(data)
        print(addrRsv)
    
ss.close()

TCPサービスおよびクライアントプログラムの例
サーバエンドプログラム
#!/usr/bin/python3.6
from socket import *

BUFFERSIZE = 1024
#SOCK_STREAM   TCP  
s = socket(AF_INET, SOCK_STREAM) # Create TCP socket
s.bind(("",60000)) # Bind to port 60000
s.listen() # Start listening
while 1:
    client,addr = s.accept() # Wait for a connection       
    print("Got a connection from ", addr)
    client.send(b'connect successfully') 
    aa = client.recv(BUFFERSIZE)
    print(aa)
    client.close()

クライアントプログラム
#!/usr/bin/python3.6
from socket import *

BUFFERSIZE = 1024

ss = socket(AF_INET,SOCK_STREAM) # Create TCP socket
ss.connect(("IP address",60000)) # Connect to the server
tmp = ss.recv(BUFFERSIZE) # Receive up to 1024 bytes
print(tmp)
ss.send(b"feedback")
ss.close() # Close connection