socket编程

    技术2024-03-16  92

    sokcet编程

    一、什么是socket二、分类三、套接字工作流程四、基于TCP的套接字五、基于UDP的套接字

    一、什么是socket

    socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。它把复杂的TCP/IP协议隐藏在socket接口的后面,对使用者而言,一组接口就是全部,让socket去组织数据。

    二、分类

    常用的三类TCP/IP协议的套接字:

    流式套接字(SOCK_STREAM): 流式套接字用于提供面向链接、可靠的数据传输服务,使用TCP协议。数据报套接字(SOCK_DGRAM): 数据报套接字提供了一种无连接的服务,该服务不能保证数据传输的可靠性,使用UDP协议。原始套接字(SOCK_RAW): 原始套接字允许对较低层次的协议直接访问,如IP,常用与检验新的协议的实现,或者访问现有服务中配置的新设备。

    三、套接字工作流程

    四、基于TCP的套接字

    TCP服务端:

    # TCP服务端 # 循环链接 from socket import * ip_port = ('127.0.0.1',8000) back_log = 5 buffer_size = 1024 tcp_server = socket(AF_INET,SOCK_STREAM) #建立服务端 tcp_server.bind(ip_port) #绑定ip及端口 tcp_server.listen(back_log) #开启服务端 while True: print("服务端开启了,等待连接") conn,addr = tcp_server.accept() #等待连接 print("客户端地址:",addr) while True: try: msg = conn.recv(buffer_size) #收信息 if not msg: break print("来自客户端的信息>>>",msg.decode("utf-8")) conn.send(msg.upper()) #发信息 except Exception: print("该链接关闭\n") break conn.close() #关闭链接 tcp_server.close() #关闭服务端

    TCP客户端:

    ## TCP 客户端 from socket import * ip_port = ('127.0.0.1',8000) buffer_size = 1024 tcp_client = socket(AF_INET,SOCK_STREAM) #建立客户端 tcp_client.connect(ip_port) #建立连接 while True: msg = input(">>>") if not msg: continue if msg == 'quit': break tcp_client.send(msg.encode('utf-8')) #发信息 data = tcp_client.recv(buffer_size) #收信息 print("来自服务端的信息>>>",data.decode("utf-8")) tcp_client.close()

    这是一个简单的TCP服务端与客户端,客户端发送一段字符串,服务端将其大写并返回给客户端。

    客户端运行结果: 服务端运行结果:

    五、基于UDP的套接字

    UDP服务端:

    #UDP服务端 from socket import * ip_port = ("127.0.0.1",8080) udp_server = socket(AF_INET,SOCK_DGRAM) #数据报 udp_server.bind(ip_port) while True: data,addr = udp_server.recvfrom(1024) print(data.decode("utf-8")) udp_server.sendto(data.upper(),addr) udp_server.close()

    UDP客户端:

    #UDP客户端 from socket import * ip_port = ('127.0.0.1',8080) udp_client = socket(AF_INET,SOCK_DGRAM) #数据报 while True: msg = input(">>>") udp_client.sendto(msg.encode("utf-8"),ip_port) data,addr = udp_client.recvfrom(1024) print(data.decode("utf-8"))

    由于UDP并不需要建立链接,因此服务端可以同时跟多个客户端通信。

    Processed: 0.030, SQL: 9