python网络编程之socket模块收发数据

socket模块是网络通信的基础,在socket模块中的socket()函数是用来创建套接字对象。要创建套接字,必须使用socket.socket()函数,一般语法如下:

socket.socket(socket_family,socket_type)

socket_family是AF_INET(面向网络的)或AF_UNIX(基于文件的),socket_type是SOCK_STREAM(传输控制协议TCP)或SOCK_DGRAM(用户数据报协议UDP)。下面是创建两种套接字的方法:

import socket

# 一、创建UDP套接字
udpsock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

# 二、创建TCP套接字
tcpsock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

创建好套接字以后,我们可以发送和接收数据了。
发送数据时,使用sendto()方法。

udpsock.sendto(b'这里是需要发送的文字',("192.168.8.121",7788))

需要注意的是,sendto()方法接收两个参数,第一个是需要发送的文字,并将其按字节流编码。第二个参数是一个元组,元组内第一个值是目标ip,并用引号括起来,第二个值是目标端口号。
接收数据时,使用bind()函数绑定本地信息,然后使用recvfrom()方法接收数据。

#绑定本地信息
localaddr = ("",38899)  
udpsock.bind(localaddr)
#接受数据
recv_data = udpsock.recvfrom(1024)
#打印数据
print(recv_data)

这里在绑定本地信息时,bind()接收一个元组,元组第一个元素是空引号,会自动绑定本地的一个ip,第二个元素是我们自定义的一个端口号。接收数据时使用方法recvfrom(1024),1024代表单次接收的最大字节数。
数据传输完毕后,关闭套接字。

#关闭套接字
udpsock.close()

最后,要验证程序是否能够进行通信,可在虚拟机和本机上分别同时运行发送程序和接收程序。但是前提是虚拟机网络连接选择桥接,保证虚拟机能够和本机ping通。

你可能感兴趣的:(python,网络编程,socket,python,网络,socket,udp,tcpip)