什么是socket
Socket通常又称“套接字”,应用程序通常会通过“套接字”实现向网络发出请求或者相应网络请求,从而实现不同计算机之间或同一计算机的不同进程之间的相互通信
socket()函数
在python中,通过socket()函数来创建套接字,语法格式如下:
socket.socket(family,type,proto)
family:套接字的家族,一般分为AF_UNIX 和 AF_INET,通常情况AF_INET使用的多一些
type:套接字类型,一般分为SOCK_STREAM 和 SOCK_DGRAM,如果是创建基于TCP协议的套接字则用SOCK_STREAM,如果创建的是基于UDP的套接字则用SOCK_DGARM
proto:默认为0
Socket内建函数
socket有很多内建函数,这里只讲解一下我们将要用到的几个函数
bind():绑定地址到套接字,参数是元组类型,(ip,port)
sendto():用于发送UPD数据,将数据发送给套接字,address的形式为(ipaddr,port)的元组形式,指定接收信息的地址,返回值是发送的字节数
recvform():用于接收UPD数据,返回值是一个包含数据和发送地址元组(data,address)
close():关闭套接字,在完成一次发送和接收数据后一定要关闭套接字
代码实例
创建两个文件一个用于发送数据的sender.py和一个用于接收数据的receiver.py。代码如下:
# sender.py
from socket import *
udp= socket(AF_INET,SOCK_DGRAM)
udp.bind(('',7788))#绑定IP和端口,IP为空则表示是本机,端口7788
data = input("请输入要发送的内容:")
upd.sendto(data.encode('utf-8'),('10.34.2.92',7789))#要发送的数据,和接收数据的地址,内容需要编码,防止出现乱码
udp.close()#关闭套接字
#receiver.py
from socket import *
udp = socket(AF_INET,SOCK_DGRAM)
udp.bind(('',7789))
print("等待接收消息")
content ,addr = udp.recvfrom(1024)
print("消息来自:【%s:%s】" % (addr[0],addr[1]))
print(content.decode('utf-8'))#需要解码,防止出现乱码
udp.close()#关闭套接字
运行代码
打开两个命令行窗口并切换到两个文件所在的目录,
其中一个输入:python sender.py 回车,这时会提示输入要发送的内容,可以随便输入一些数据
另外一个输入:python receiver.py 回车,这时就会接收到来自sender.py发送的数据了。