逆向学习网络篇:通过Socket建立连接并传输数据

简介: 逆向学习网络篇:通过Socket建立连接并传输数据

在网络编程中,Socket是一种提供不同计算机之间通信的机制。通过Socket,我们可以建立客户端和服务器之间的连接,并实现数据的传输。本文将详细介绍如何使用Socket在客户端和服务器之间建立连接,并进行数据传输。我们将通过几个代码案例来展示这一过程。

1. 服务器端Socket编程

服务器端需要创建一个Socket,绑定到一个特定的IP地址和端口,并监听来自客户端的连接请求。以下是一个简单的TCP服务器端Socket编程示例:

import socket
# 创建一个TCP socket
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 绑定IP地址和端口
server_socket.bind(('localhost', 12345))
# 开始监听,最大连接数为5
server_socket.listen(5)
print("Server is listening on port 12345...")
while True:
    # 接受客户端连接
    client_socket, client_address = server_socket.accept()
    print(f"Accepted connection from {client_address}")
    # 接收数据
    data = client_socket.recv(1024)
    print(f"Received: {data.decode()}")
    # 发送数据
    response = "Hello, client!".encode()
    client_socket.send(response)
    # 关闭客户端socket
    client_socket.close()

2. 客户端Socket编程

客户端需要创建一个Socket,并尝试连接到服务器的IP地址和端口。一旦连接建立,客户端可以发送和接收数据。以下是一个简单的TCP客户端Socket编程示例:

import socket
# 创建一个TCP socket
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 连接服务器
client_socket.connect(('localhost', 12345))
# 发送数据
message = "Hello, server!".encode()
client_socket.send(message)
# 接收数据
data = client_socket.recv(1024)
print(f"Received: {data.decode()}")
# 关闭socket
client_socket.close()

3. 多客户端连接

在实际应用中,服务器通常需要处理多个客户端的连接。以下是一个扩展的服务器端示例,它使用多线程来处理多个客户端连接:

import socket
import threading
def handle_client(client_socket):
    # 接收数据
    data = client_socket.recv(1024)
    print(f"Received: {data.decode()}")
    # 发送数据
    response = "Hello, client!".encode()
    client_socket.send(response)
    # 关闭客户端socket
    client_socket.close()
# 创建一个TCP socket
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 绑定IP地址和端口
server_socket.bind(('localhost', 12345))
# 开始监听,最大连接数为5
server_socket.listen(5)
print("Server is listening on port 12345...")
while True:
    # 接受客户端连接
    client_socket, client_address = server_socket.accept()
    print(f"Accepted connection from {client_address}")
    # 创建新线程处理客户端连接
    client_handler = threading.Thread(target=handle_client, args=(client_socket,))
    client_handler.start()

通过这些代码案例,我们可以看到如何使用Socket在客户端和服务器之间建立连接,并进行数据传输。这些操作是网络编程的基础,对于理解和实现网络应用至关重要。

目录
相关文章
RT-DETR改进策略【Neck】| BiFPN:双向特征金字塔网络-跨尺度连接和加权特征融合
RT-DETR改进策略【Neck】| BiFPN:双向特征金字塔网络-跨尺度连接和加权特征融合
107 9
RT-DETR改进策略【Neck】| BiFPN:双向特征金字塔网络-跨尺度连接和加权特征融合
当虚拟机出现网络连接问题时,应该先检查Hyper-V的网卡连接配置
当虚拟机出现网络连接问题时,应首先检查Hyper-V的网卡配置。具体步骤包括:确认虚拟机运行状态、检查虚拟交换机类型和物理网卡连接、确保虚拟机网络适配器正确连接到虚拟交换机,并验证网络配置(IP地址等)。常见问题如虚拟交换机配置错误、网络适配器未连接或防火墙阻止连接,可通过重新配置或调整设置解决。必要时重启虚拟机和宿主机,查看事件日志或联系技术支持以进一步排查问题。
RT-DETR改进策略【Neck】| GFPN 超越BiFPN 通过跳层连接和跨尺度连接改进RT-DETR颈部网络
RT-DETR改进策略【Neck】| GFPN 超越BiFPN 通过跳层连接和跨尺度连接改进RT-DETR颈部网络
61 12
RT-DETR改进策略【Neck】| GFPN 超越BiFPN 通过跳层连接和跨尺度连接改进RT-DETR颈部网络
YOLOv11改进策略【Neck】| GFPN 超越BiFPN 通过跳层连接和跨尺度连接改进v11颈部网络
YOLOv11改进策略【Neck】| GFPN 超越BiFPN 通过跳层连接和跨尺度连接改进v11颈部网络
185 10
YOLOv11改进策略【Neck】| GFPN 超越BiFPN 通过跳层连接和跨尺度连接改进v11颈部网络
YOLOv11改进策略【Neck】| BiFPN:双向特征金字塔网络-跨尺度连接和加权特征融合
YOLOv11改进策略【Neck】| BiFPN:双向特征金字塔网络-跨尺度连接和加权特征融合
231 7
YOLOv11改进策略【Neck】| BiFPN:双向特征金字塔网络-跨尺度连接和加权特征融合
微信小程序网络请求与API调用:实现数据交互
本文深入探讨了微信小程序的网络请求与API调用,涵盖`wx.request`的基本用法、常见场景(如获取数据、提交表单、上传和下载文件)及注意事项(如域名配置、HTTPS协议、超时设置和并发限制)。通过一个简单案例,演示了如何实现小程序与服务器的数据交互。掌握这些技能将帮助你构建功能更丰富的应用。
uniapp-网络数据请求全教程
这篇文档介绍了如何在uni-app项目中使用第三方包发起网络请求
124 3
不为人知的网络编程(十九):能Ping通,TCP就一定能连接和通信吗?
这网络层就像搭积木一样,上层协议都是基于下层协议搭出来的。不管是ping(用了ICMP协议)还是tcp本质上都是基于网络层IP协议的数据包,而到了物理层,都是二进制01串,都走网卡发出去了。 如果网络环境没发生变化,目的地又一样,那按道理说他们走的网络路径应该是一样的,什么情况下会不同呢? 我们就从路由这个话题聊起吧。
101 4
不为人知的网络编程(十九):能Ping通,TCP就一定能连接和通信吗?
HTTPS协议是**一种通过计算机网络进行安全通信的传输协议
HTTPS协议是**一种通过计算机网络进行安全通信的传输协议
110 11