AI智能
改变未来

python使用socket模块进行网络编程

文章目录

  • socket创建服务器流程
  • socket创建客户端程序

python标准库提供了

socket

模块用于建立服务器与客户端,并且可以相互通信。

  1. 服务器端建立起一个socket对象,并等待客户端连接。

  2. 客户端使用socket对象与服务器连接,连接成功就可以进行相互通信(即传输数据)

socket模块的

socket

对象是socket网络编程的基础对象,其原型为:

socket(family, type, proto)参数说明:- family: 地址族,可选参数,默认为 AF_INET(IPv4), 也可以是AF_INET6或AF_UNIX;- type: socket类型,可选参数,默认为 SOCK_STREAM(TCP协议),也可用 SOCKET_DGRAM(UDP协议)- proto: 协议类型,可选参数,默认为0

socket对象主要有以下几个方法:

  • bind(address)

    : 参数address是由IP地址和端口号构成的

    元组

    ,如果IP为空,则表示本机。该方法的作用,使socket与服务器地址相关联

  • listen(backlog)

    : 参数backlog指定在拒绝连接之前,操作系统允许它的最大挂起连接对象。最小值为0,大部分程序最多设置为5就够了。该方法的作用:将socket设置为服务器模式,之后就可以使用 accept 来等待客户端连接了

  • accept()

    : 等待客户端连接,并返回一个由 socket连接客户端地址 组成的

    元组
  • close()

    : 关闭socket, 停止本程序与服务器或客户端的连接

  • recv(buffersize[,flag])

    : 用于接收远程连接传来的信息,buffersize可以设定缓冲区的大小

  • send(data[,flag])

    : 向远程的连接发送信息,data应该是bytes类型的数据,其返回值为已传送的字节数

socket创建服务器流程

如下用TCP连接方式创建了一个服务器端程序

#创建服务器端程序import socketHOST = \'\'PORT = 10888s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)s.bind((HOST,PORT))s.listen(1)conn, addr = s.accept()print(\'客户端地址: \', addr)while True:data = conn.recv(1024)if not data:breakprint(\'服务器收到的数据: \', data.decode(\'utf-8\'))conn.send(data)conn.close()

由于还没有创建客户端,运行该程序会使得服务端一直处于等待客户端连接的状态,看不出效果

socket创建客户端程序

创建客户端程序比服务端简单,流程如下:

  • connect(address)

    : 参数address是一个由主机名/IP和端口构成的元组

如下创建一个客户端程序:

#创建客户端程序import socketHOST = \'localhost\'PORT = 10888s = socket.socket(socket.AF_INET, type= socket.SOCK_STREAM)s.connect((HOST, PORT))data = \'你好\'while data:s.sendall(data.encode(\'utf-8\'))data = s.recv(512)print(f\'服务器返回的数据: {data.decode(\"utf-8\")}\')data = input(\'向服务器发送数据: \')s.close()

先运行服务器程序,再运行客户端程序,运行效果如下:
(左边是服务器收到的数据,右边是客户端发送和接收的数据)

赞(0) 打赏
未经允许不得转载:爱站程序员基地 » python使用socket模块进行网络编程