在计算机网络中,Socket 是一个抽象层,它将网络通信的细节隐藏起来,为开发者提供了一个简单的接口来发送和接收数据。Socket 编程是网络编程的基础,它允许程序之间进行通信。本文将带你入门 Socket 编程,帮助你理解基本概念和步骤。
Socket 是一个通信端点,它允许程序发送和接收数据。在 TCP/IP 协议族中,有两种主要类型的 Socket:流式 Socket(Stream Sockets,基于 TCP)和数据报 Socket(Datagram Sockets,基于 UDP)。
Socket 编程通常包括以下几个步骤:
下面是一个简单的 TCP Socket 编程示例,包括客户端和服务器端代码。
import socket
# 创建 socket 对象
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 获取本地主机名
host = socket.gethostname()
port = 9999
# 绑定端口号
server_socket.bind((host, port))
# 设置最大连接数,超过后排队
server_socket.listen(5)
while True:
# 建立客户端连接
client_socket, addr = server_socket.accept()
print(f"连接地址: {str(addr)}")
while True:
# 接收小于 1024 字节的数据
data = client_socket.recv(1024)
if not data:
# 如果没有数据,跳出循环
break
# 发送数据
client_socket.send(data)
# 关闭连接
client_socket.close()
import socket
# 创建 socket 对象
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 获取本地主机名
host = socket.gethostname()
port = 9999
# 连接服务,指定主机和端口
client_socket.connect((host, port))
try:
# 发送数据
message = 'This is the message.'
client_socket.send(message.encode('utf-8'))
# 接收小于 1024 字节的数据
data = client_socket.recv(1024)
print(f"Received: {data.decode('utf-8')}")
finally:
# 关闭连接
client_socket.close()
UDP Socket 编程与 TCP 类似,但不需要建立连接。
import socket
# 创建 socket 对象
server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 获取本地主机名
host = socket.gethostname()
port = 9998
# 绑定端口号
server_socket.bind((host, port))
while True:
# 接收数据和客户端地址
data, addr = server_socket.recvfrom(1024)
print(f"Received message: {data} from {addr}")
# 发送数据
server_socket.sendto(data, addr)
import socket
# 创建 socket 对象
client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 获取本地主机名
host = socket.gethostname()
port = 9998
# 发送数据
message = 'This is a UDP message.'
client_socket.sendto(message.encode('utf-8'), (host, port))
# 接收数据
data, server = client_socket.recvfrom(1024)
print(f"Received: {data.decode('utf-8')} from {server}")
# 关闭连接
client_socket.close()
Socket 编程是网络编程的基础,通过本文的介绍,你应该对 Socket 的基本概念和编程步骤有了初步的了解。无论是 TCP 还是 UDP,Socket 都提供了一个简单的接口来实现网络通信。
全部0条评论
快来发表一下你的评论吧 !