赞
踩
socket简称套接字,是进程间通信的一种方式,它与其他进程间通信的一个主要不同是,它能实现不同主机间的进程通信。
socket创建:可以使用socket模块下的socket方法来创建。
参数:AF_INET 用于Internet进程间通信
AF_UNIX用于一台机器进程间通信
SOCK_DRGAM数据报套接字,主要用于UDP协议
SOCK_STREAM流式套接字,主要用于TCP协议通信
常用指令:
sendto :发送数据。sendto("data",("IP",Port))
bind: 绑定IP及端口。 bind(('IP',Port)) 其中通常情况下IP不写,系统会默认分配。
recvfrom: 用于接收数据,recvfrom(1024)
创建socket:
from socket import * UdpSocket = socket(AF_INET,SOCK_DGRAM) TcpSocket = socket(AF_INET,SOCK_STREAM) import socket UdpSocket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) TcpSocket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
以上两种方式均可以创建DUP、TCP套接字
UDP协议数据发送:
from socket import * UdpSocket = socket(AF_INET,SOCK_DGRAM) TcpSocket = socket(AF_INET,SOCK_STREAM) SendAddr = ('192.168.5.1',8080) #sendData = input("请输入发送内容") sendData = "测试UDP套接字" UdpSocket.sendto(sendData.encode("gb2312"),SendAddr)使用网络调试助手接收UDP协议数据
代码讲解:UdpSocket创建一个UDP的socket套接字,SendAddr为目标地址,以元组的形式保留("IP",Prot);sendData为需要发送的数据以字符串形式保存。encode("gb2312")指使用gb2312对内容进行编码;在socket中有一个sendto方法,用于发送UDP数据, 其格式为:sendto(Data,Addr);
注意:发现在网络助手中发现端口为63218, 在UDP发送中,通常不定义本机端口,系统会随机分配端口。
UDP协议数据接收:
from socket import * UdpSocket = socket(AF_INET,SOCK_DGRAM) TcpSocket = socket(AF_INET,SOCK_STREAM) AddrBind = ("",8893) UdpSocket.bind(AddrBind) TempData = UdpSocket.recvfrom(1024) print(TempData)
代码讲解: 创建UDP-socket套接字,使用bind绑定IP及端口,使用recvfrom接收信息,并赋值给TempData,并打印出来。
例:UDP协议全双工,模式聊天室
from socket import * from threading import Thread UdpSocket = None AddrIP = '' AddrPort = 0 def SendData(): while True: #print(AddrIP,AddrPort) Data = input("请输入要发送的信息:") UdpSocket.sendto(Data.encode('gb2312'),(AddrIP,AddrPort)) def RecvfromData(): while True: TempData = UdpSocket.recvfrom(1024) print(">>%s:%s"%(str(TempData[1]),TempData[0])) def main(): global UdpSocket global AddrIP global AddrPort UdpSocket = socket(AF_INET, SOCK_DGRAM) AddrIP = input("请输入目标地址:").strip() AddrPort = int(input("请输入目标端口:").strip()) UdpSocket.bind(('',8893)) ts = Thread(target=SendData) tr = Thread(target=RecvfromData) ts.start() tr.start() ts.join() tr.join() if __name__ == "__main__": main()
代码讲解:通过创建子线程的形式,来分别运行接发函数,从而实现聊天室
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。