socketソケットの作成、送信、受信、閉じる方法名およびコード

37066 ワード

関数socket.socketは、2つのパラメータを持つsocketを作成します.Address Family:AF_を選択できます.INET(インターネットプロセス間通信用)またはAF_UNIX(同じマシンプロセス間通信用)、実際の作業でよく使われるAF_INETType:ソケットタイプ、SOCK_STREAM(主にTCPプロトコル用)またはSOCK_DGRAM(データレポートソケット、主にUDPプロトコルに用いる).udpソケットを作成するimportソケット
udpのソケットの作成
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
...ここではソケットを使う機能(省略)...
使用しない場合は、ソケットを閉じます
s.close() .tcpソケット(tcpソケット)importソケットを作成する
tcpのソケットの作成
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
...ここではソケットを使う機能(省略)...
使用しない場合は、ソケットを閉じます
s.close() 1.送信sendto()1.基本使用
import socket 
 def main():
    #     udp   
    udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    #            
    # udp_socket.sendto("hahahah",    ip  port)
    udp_socket.sendto(b"hello world", ("192.168.57.65", 8080))

    #      
    udp_socket.close()
    if __name__ == "__main__":
    main()
	

2.任意のデータの送信
import socket
def main():
    #     udp   
    udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

    #        
    send_data = input("         :")

    #            
    # udp_socket.sendto("hahahah",    ip  port)
    # udp_socket.sendto(b"hahahah------1----", ("192.168.57.65", 8080))
    udp_socket.sendto(send_data.encode("utf-8"), ("192.168.57.65", 8080))


    #      
    udp_socket.close()
    if __name__ == "__main__":
    main()

3.循環送信データ
import socket

def main():
    #     udp   
    udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

    while True:

        #        
        send_data = input("         :")

        #            
        # udp_socket.sendto("hahahah",    ip  port)
        # udp_socket.sendto(b"hahahah------1----", ("192.168.57.65", 8080))
        udp_socket.sendto(send_data.encode("utf-8"), ("192.168.57.65", 8080))


    #      
    udp_socket.close()
    if __name__ == "__main__":
    main()

4.ループアウト機能付き送信
import socket

def main():
    #     udp   
    udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

    while True:

        #        
        send_data = input("         :")

        #         exit,       
        if send_data == "exit":
            break

        #            
        # udp_socket.sendto("hahahah",    ip  port)
        # udp_socket.sendto(b"hahahah------1----", ("192.168.33.53", 8080))
        udp_socket.sendto(send_data.encode("utf-8"), ("192.168.33.53", 8080))


    #      
    udp_socket.close()
    if __name__ == "__main__":
    main()
	

2.受信bind():バインドアドレス情報recvfrom:受信データ2.1バインドポートデータ受信用
import socket


def main():
    # 1.      
    udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    # 2.         
    localaddr = ("", 7788)
    udp_socket.bind(localaddr)
    # 3.     
    recv_data = udp_socket.recvfrom(1024)
    # 4.         
    print(recv_data)
    # 5.      
    udp_socket.close()
    if __name__ == "__main__":
    main()

2.2受信データの解析import socket
def main():
    # 1.      
    udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    # 2.         
    localaddr = ("", 7788)
    udp_socket.bind(localaddr)  #          ip  port,     
    # 3.     
    recv_data = udp_socket.recvfrom(1024)
    # recv_data             (      ,(    ip, port))
    recv_msg = recv_data[0]  #        
    send_addr = recv_data[1]  #           
    # 4.         
    # print(recv_data)
    # print("%s:%s" % (str(send_addr), recv_msg.decode("utf-8")))
    print("%s:%s" % (str(send_addr), recv_msg.decode("gbk")))
    # 5.      
    udp_socket.close()
    if __name__ == "__main__":
    main()        

2.3循環受信と表示データ
import socket

def main():
    # 1.      
    udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    # 2.         
    localaddr = ("", 7788)
    udp_socket.bind(localaddr)  #          ip  port,     

    # 3.     
    while True:
        recv_data = udp_socket.recvfrom(1024)
        # recv_data             (      ,(    ip, port))
        recv_msg = recv_data[0]  #        
        send_addr = recv_data[1]  #           
        # 4.         
        # print(recv_data)
        # print("%s:%s" % (str(send_addr), recv_msg.decode("utf-8")))
        print("%s:%s" % (str(send_addr), recv_msg.decode("gbk")))
    # 5.      
    udp_socket.close()
    
    if __name__ == "__main__":
    main()



2.4バインドポート送信データ
import socket

def main():
    #     udp   
    udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

    #       
    udp_socket.bind(("", 7890))

    while True:

        #        
        send_data = input("         :")

        #            
        # udp_socket.sendto("hahahah",    ip  port)
        # udp_socket.sendto(b"hahahah------1----", ("192.168.33.53", 8080))
        udp_socket.sendto(send_data.encode("utf-8"), ("192.168.33.53", 8080))

    #      
    udp_socket.close()
    
    if __name__ == "__main__":
    main()

3.socketソケットの作成をまとめる
ガイドパック
import socket
udpソケットの作成
udp_socket = socket.socket(socket.AF_INET,sock.SOCK_DGRAM)送信データ
注意:相手のアドレスはip+portで、メタグループタイプのデータです.
udp_socket.sendto(コンテンツ.encode(「utf-8」)受信データ
1.まずbind(アドレス)#アドレスをメタグループタイプ(ip,port)にバインドする
一度に受信するバイト数
注意:recv_data変数はメタグループデータ型を受信する
(コンテンツ、送信者アドレス)送信者アドレス情報も1つのメタグループである
recv_data = udp.socket.recvfrom(1024)
データを取得するには解析が必要です
linuxシステムの場合、解析符号化が必要です
recv.data[0].decode(“utf-8”)
Windowsシステムの場合、解析符号化が必要です
recv.data[0].decode(“gbk”) 1.udpを使用してメッセージを送受信できるソケットを完了
import socket

def main():
    #     udp   
    udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

    #      ip/port
    dest_ip = input("      ip:")
    dest_port = int(input("      port:"))

    #        
    send_data = input("         :")

    #            
    # udp_socket.sendto("hahahah",    ip  port)
    # udp_socket.sendto(b"hahahah------1----", ("192.168.57.65", 8080))
    # udp_socket.sendto(send_data.encode("utf-8"), ("192.168.57.65", 8080))
    udp_socket.sendto(send_data.encode("utf-8"), (dest_ip, dest_port))

    #          
    recv_data = udp_socket.recvfrom(1024)
    #                
    print(recv_data)


    #      
    udp_socket.close()
    if __name__ == "__main__":
    main()

2.udpチャット
import socket


def send_msg(udp_socket):
    """    """
    #         
    dest_ip = input("      ip:")
    dest_port = int(input("      port:"))
    send_data = input("         :")
    udp_socket.sendto(send_data.encode("utf-8"), (dest_ip, dest_port))


def recv_msg(udp_socket):
    """    """
    recv_data = udp_socket.recvfrom(1024)
    print("%s:%s" % (str(recv_data[1]), recv_data[0].decode("gbk")))


def main():
    #      
    udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

    #     
    udp_socket.bind(("", 7788))

    #            
    while True:
        #   
        send_msg(udp_socket)

        #      
        recv_msg(udp_socket)
        if __name__ == "__main__":
    main()

3.udpチャットのアップグレード
import socket


def send_msg(udp_socket):
    """    """
    #         
    dest_ip = input("      ip:")
    dest_port = int(input("      port:"))
    send_data = input("         :")
    udp_socket.sendto(send_data.encode("utf-8"), (dest_ip, dest_port))


def recv_msg(udp_socket):
    """    """
    recv_data = udp_socket.recvfrom(1024)
    print("%s:%s" % (str(recv_data[1]), recv_data[0].decode("utf-8")))


def main():
    #      
    udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

    #     
    udp_socket.bind(("", 7788))

    #            
    while True:
        print("-----xxx   -----")
        print("1:    ")
        print("2:    ")
        print("0:    ")
        op = input("     :")

        if op == "1":
            #   
            send_msg(udp_socket)
        elif op == "2":
            #      
            recv_msg(udp_socket)
        elif op == "0":
            break
        else:
            print("         ...")
            if __name__ == "__main__":
    main()