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.基本使用
2.任意のデータの送信
3.循環送信データ
4.ループアウト機能付き送信
2.受信bind():バインドアドレス情報recvfrom:受信データ2.1バインドポートデータ受信用
2.2受信データの解析import socket
2.3循環受信と表示データ
2.4バインドポート送信データ
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を使用してメッセージを送受信できるソケットを完了
2.udpチャット
3.udpチャットのアップグレード
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()