Socket 编程基础入门
在计算机网络中,Socket 是一个抽象层,它将网络通信的细节隐藏起来,为开发者提供了一个简单的接口来发送和接收数据。Socket 编程是网络编程的基础,它允许程序之间进行通信。本文将带你入门 Socket 编程,帮助你理解基本概念和步骤。
1. Socket 的基本概念
Socket 是一个通信端点,它允许程序发送和接收数据。在 TCP/IP 协议族中,有两种主要类型的 Socket:流式 Socket(Stream Sockets,基于 TCP)和数据报 Socket(Datagram Sockets,基于 UDP)。
- 流式 Socket(TCP) :提供面向连接、可靠的字节流服务。数据传输是有序的,并且保证数据的完整性。
- 数据报 Socket(UDP) :提供无连接服务,数据包可能丢失或乱序到达,但不保证数据的完整性。
2. Socket 编程步骤
Socket 编程通常包括以下几个步骤:
- 创建 Socket :在客户端和服务器端都需要创建一个 Socket 对象。
- 绑定地址 :服务器端需要将 Socket 绑定到一个 IP 地址和端口号上。
- 监听连接 :服务器端需要监听客户端的连接请求。
- 接受连接 :服务器端接受客户端的连接请求,建立连接。
- 数据传输 :客户端和服务器端可以开始发送和接收数据。
- 关闭连接 :数据传输完成后,需要关闭 Socket 连接。
3. TCP Socket 编程示例
下面是一个简单的 TCP Socket 编程示例,包括客户端和服务器端代码。
服务器端代码(Python):
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()
客户端代码(Python):
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()
4. UDP Socket 编程示例
UDP Socket 编程与 TCP 类似,但不需要建立连接。
服务器端代码(Python):
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)
客户端代码(Python):
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()
5. 总结
Socket 编程是网络编程的基础,通过本文的介绍,你应该对 Socket 的基本概念和编程步骤有了初步的了解。无论是 TCP 还是 UDP,Socket 都提供了一个简单的接口来实现网络通信。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
接口
+关注
关注
33文章
8465浏览量
150751 -
Socket
+关注
关注
0文章
210浏览量
34621 -
编程
+关注
关注
88文章
3574浏览量
93545 -
网络通信
+关注
关注
4文章
783浏览量
29744
发布评论请先 登录
相关推荐
C语言SOCKET编程指南
这个文档是一个指南,而不是参考书。如果你刚开始socket 编程并想找一本入门书,那么你是我的读者。但这不是一本完全的socket 编程书。
发表于 12-09 14:58
•0次下载
SOCKEt编程介绍
这个文档是一个指南,而不是参考书。如果你刚开始 socket 编程并想找一本入门书,那么你是我的读者。但这不是一本完全的 socket 编程
发表于 03-02 15:36
•4次下载
socket是什么意思_socket编程是什么意思_socket详解
从编程语言的角度,socket是一个无符号整型变量,用来标识一个通信进程。两个进程通信,总要知道这几个信息:双方的ip地址和端口号,通信所采用的协议栈。socket就是和这些东西绑定的,实现s
发表于 12-28 17:21
•2.4w次阅读
基于Socket的java通信编程详解
Java最初是作为网络编程语言出现的,其对网络提供了高度的支持,使得客户端和服务器的沟通变成了现实,而在网络编程中,使用最多的就是Socket。像大家熟悉的QQ、MSN都使用了Socket
发表于 12-28 17:37
•2819次阅读
Socket 网络编程框架介绍
Socket 网络编程框架 Socket(套接字)是一个网络编程概念,描述了一个通信端点(Endpoint),用于建立网络连接(Connection)并传输数据。 Linux Kern
如何理解socket编程接口
Socket编程接口是一种网络编程的基本概念,它提供了一种在不同计算机之间进行通信的方法。 Socket编程接口的基本概念 1.1
什么是socket编程 socket与tcp/ip协议的关系
什么是Socket编程 Socket编程是一种网络编程技术,它允许程序之间进行通信。在计算机科学中,so
socket编程中的阻塞与非阻塞
在网络编程中, socket 是一个非常重要的概念,它提供了一个抽象层,使得开发者可以不必关心底层的网络通信细节。 socket 编程中的阻塞与非阻塞模式是两种不同的操作方式,它们对程
评论