网络编程基础-Socket编程

简介: Socket是传输控制层协议,是为了方便使用TCP或UDP而抽象出来的一层,是位于应用层和传输控制层之间的一组接口。WebSocket是应用层协议。接下来让我们一起来了解一下在python里面是如何使用Socket进行编程的。

大家都知道,HTTP协议是非持久化的,单向的网络协议,在建立连接后只允许浏览器向服务器发出请求后,服务器才能返回相应的数据。缺点就是会导致过多不必要的请求,每一次请求、应答,都浪费了一定流量在相同的头部信息上。然而WebSocket的出现可以弥补这一缺点。在WebSocket中,只需要服务器和浏览器通过HTTP协议进行一个握手的动作,然后单独建立一条TCP的通信通道进行数据的传送。WebSocket是双向通信协议,模拟Socket协议,可以双向发送或接受信息。HTTP是单向的。

    Socket是传输控制层协议,是为了方便使用TCP或UDP而抽象出来的一层,是位于应用层和传输控制层之间的一组接口。WebSocket是应用层协议。接下来让我们一起来了解一下在python里面是如何使用Socket进行编程的。


Socket通信流程:

1、服务器根据地址类型、socket类型、协议创建socket对象

2、服务器为socket绑定ip地址和端口号

3、服务器socket监听端口号请求,随时准备接收客户端发过来的连接请求(这时候socket并没有被打开)

4、客户端创建socket

5、客户端根据服务器ip地址和端口号试图连接服务器socket

6、服务器socket接收到客户端socket请求,被动打开,开始接收客户端请求,直到客户端返回连接信息。这时候socket进入阻塞状态,即accept()方法一直等到客户端返回连接信息后才返回,开始接收下一个客户端连接请求

7、客户端连接成功,向服务器端发送连接状态信息

8、服务器accept()方法返回,连接成功

9、客户端向服务端socket写入信息/服务端向客户端写入信息

10、服务端读取信息/客户端读取信息

11、客户端和服务端关闭连接


Socket通信模型


微信图片_20220114143816.png


python代码实现socket服务端和客户端通信

# socket_server.py
import socket
ip_port = ('127.0.0.1', 1234)
# 1、创建socket对象
obj = socket.socket()
# 2、绑定ip port
obj.bind(ip_port)
# 3、开启监听
obj.listen()
print('服务端已启动')
# 4、等待连接 、返回套接字和客户端ip地址
conn, address = obj.accept()
print('客户端地址:', address)
# 5、接收客户端数据
receive_data = conn.recv(1024).decode('utf-8')
print("接收到客户端的数据", receive_data)
# 6、发送数据
send_data = input('请输入要发送的数据:')
conn.sendall(send_data.encode('utf-8'))
# 7、关闭socket
conn.close()
# socket_client.py
import socket
ip_port = ('127.0.0.1', 1234)
# 1、创建socket对象
obj = socket.socket()
# 2、连接服务端
obj.connect(ip_port)
# 3、发送数据
send_data = input('请输入要发送的数据:')
obj.sendall(send_data.encode('utf-8'))
# 4、接收服务端数据
server_data = obj.recv(1024).decode('utf-8')
print("接收到客户端的数据", server_data)
# 5、关闭socket
obj.close()

注意:发送的数据格式要进行编码,接收后要进行转码操作。

然后先后运行socket_server.py和socket_client.py文件,就可以实现客户端和服务端的通信,脚本运行结果如下:


微信图片_20220114143819.gif


以上只是socket的一个最最最简单的用法,包括一些概念也是从网上各种查找资料进行整理,对概念的理解还不够深入,后续看视频更深入的理解之后再进行补充。


有问题都可以在知识星球或者添加小编微信提问喔,有想进学习交流群的也可以添加微信。具体方式在公众号菜单处可以看到。

相关文章
|
22天前
|
网络协议 安全 网络安全
网络编程:基于socket的TCP/IP通信。
网络编程:基于socket的TCP/IP通信。
123 0
|
2天前
|
网络协议 安全 网络安全
震惊!Python Socket竟能如此玩转网络通信,基础到进阶全攻略!
【9月更文挑战第12天】在网络通信中,Socket编程是连接不同应用与服务的基石。本文通过问答形式,从基础到进阶全面解析Python Socket编程。涵盖Socket的重要性、创建TCP服务器与客户端、处理并发连接及进阶话题如非阻塞Socket、IO多路复用等,帮助读者深入了解并掌握网络通信的核心技术。
16 6
|
1天前
|
消息中间件 网络协议 网络安全
解锁Python Socket新姿势,进阶篇带你玩转高级网络通信技巧!
【9月更文挑战第13天】在掌握了Python Socket编程基础后,你是否想进一步提升技能?本指南将深入探讨Socket编程精髓,包括从阻塞到非阻塞I/O以提高并发性能,使用`select`进行非阻塞操作示例;通过SSL/TLS加密通信保障数据安全,附带创建SSL服务器的代码实例;以及介绍高级网络协议与框架,如HTTP、WebSocket和ZeroMQ,帮助你简化复杂应用开发。通过学习这些高级技巧,你将在网络编程领域更进一步。
11 2
|
29天前
|
分布式计算 网络协议 Python
Python网络编程:socket编程
Socket 编程是网络编程的重要部分,主要用于在不同计算机之间进行通信。Python 提供了一个非常强大的 socket 库,使得网络编程变得简单和灵活。本篇博文将详细介绍 Python 的 socket 编程,包括基础概念、核心组件、常用功能,并附上一个综合的示例及其运行结果。
|
26天前
|
网络协议 Java
一文讲明TCP网络编程、Socket套接字的讲解使用、网络编程案例
这篇文章全面讲解了基于Socket的TCP网络编程,包括Socket基本概念、TCP编程步骤、客户端和服务端的通信过程,并通过具体代码示例展示了客户端与服务端之间的数据通信。同时,还提供了多个案例分析,如客户端发送信息给服务端、客户端发送文件给服务端以及服务端保存文件并返回确认信息给客户端的场景。
一文讲明TCP网络编程、Socket套接字的讲解使用、网络编程案例
|
10天前
|
存储 网络协议 安全
C语言 网络编程(五)Socket和端口
Socket 是 TCP/IP 五层网络模型中应用层的编程接口,用于实现不同主机间应用程序的双向通信。它作为网络通信的端点,连接应用层与网络协议栈,提供可靠的流式或非流式数据传输服务。Socket 包括流式(SOCKET_STREAM)、数据报(SOCK_DGRAM)和原始套接字(SOCK_RAW)三种类型,分别适用于不同场景。通过 IP 地址和端口号,Socket 能准确识别并转发数据包至指定进程。端口号分为知名端口(1-1023)、注册端口(1024-49151)和动态端口(49152-65535),确保数据准确交付。
|
14天前
|
网络协议 C# 开发者
WPF与Socket编程的完美邂逅:打造流畅网络通信体验——从客户端到服务器端,手把手教你实现基于Socket的实时数据交换
【8月更文挑战第31天】网络通信在现代应用中至关重要,Socket编程作为其实现基础,即便在主要用于桌面应用的Windows Presentation Foundation(WPF)中也发挥着重要作用。本文通过最佳实践,详细介绍如何在WPF应用中利用Socket实现网络通信,包括创建WPF项目、设计用户界面、实现Socket通信逻辑及搭建简单服务器端的全过程。具体步骤涵盖从UI设计到前后端交互的各个环节,并附有详尽示例代码,助力WPF开发者掌握这一关键技术,拓展应用程序的功能与实用性。
36 0
|
14天前
|
Rust 网络协议 安全
揭开Rust网络编程的神秘面纱:全新的Socket体验,让你告别内存泄漏的噩梦!
【8月更文挑战第31天】Rust语言凭借其卓越的内存安全性和高性能,在网络编程领域展现出独特优势。本文将带你探索Rust中的Socket编程,展示如何使用标准库`std::net`模块轻松实现TCP服务器与客户端。通过简洁的代码示例,你将看到Rust如何简化网络通信流程,并通过`async/await`异步模型高效处理并发连接。此外,Rust社区提供的优秀库如`tokio`和`async-std`进一步增强了异步网络编程的能力。无论是从基础示例还是高级应用,Rust都将为你带来耳目一新的网络编程体验。
48 0
|
18天前
|
网络协议 Linux 应用服务中间件
Socket通信之网络协议基本原理
【8月更文挑战第27天】网络协议定义了机器间通信的标准格式,确保信息准确无损地传输。主要分为两种模型:OSI七层模型与TCP/IP模型。
|
2月前
|
安全 网络协议 网络安全
Python Socket编程大揭秘:从菜鸟到黑客的进阶之路,你准备好了吗?
【7月更文挑战第27天】Python Socket编程是网络开发的关键技能,它开启从简单数据传输到复杂应用的大门。Socket作为网络通信的基础,通过Python的`socket`模块可轻松实现跨网通信。
35 0