首页 > 编程语言 >套接字编程之socket的原理

套接字编程之socket的原理

时间:2024-08-04 20:54:44浏览次数:13  
标签:socket -- 编程 ipone conn 接字 服务端 客户端

所谓套接字,其实就是socket

socket是干嘛用的呢?

当我们写一个C/S架构的软件时,是需要实现客户端与服务端之间的网络通信的,不然你的客户端怎么和服务端建立连接呢?这个socket就是负责干这个事的。
还记得OSI七层协议吗?如果是计算机科班出身的同学一定学过这个,没关系,哥带你回顾下到底什么是OSI七层协议以及这玩意有什么鸟用。

OSI七层协议(从上往下,注意数据传输时也是从应用层开始往下封包):
7.应用层 -- 567三层可以合并当作全部属于应用层,这里就是应用程序,比如QQ、微信等
6.表示层
5.会话层 
4.传输层 -- TCP/UDP端口
3.网络层 -- IP地址
2.数据链路层  -- 把信号转换成二进制数0101....
1.物理层 -- 这是最底层,例如网线、光纤

那么我为什么要帮你回顾OSI七层协议呢?
这里就要引出socket的作用了,如果没有这个socket,那么我们在做网络编程时就要先搞清楚TCP/UDP的相关内容,而这部分内容极其庞杂,以我的聪明才智都搞不定,你觉得你可以?呵呵。所以你看看人家python多么厚道,人知道你搞不定,所以给你来个socket直接封装了传输层和网络层,我们在进行网络编程的时候只需要调用socket的接口函数就行了。

直接来个示例,让你见识下socket的牛逼之处。
下面我写个C/S结构的简单代码,模拟下打电话的过程,教你如何进行socket编程。
用生活中的打电话的例子来说明socket编程的步骤:
第一步:买个手机
第二步:绑定个手机卡
第三步:开机
第四步:等待一个电话连接进来
第五步:接收消息
第六步:回复消息
第七步:挂电话
第八步:关机

好了,根据上面这个思路,开始写代码:

**服务端代码:**
import socket
#实例化一个对象ipone,其中AF_INET代表基于网络类型的套接字,SOCK_STREAM代表TCP协议。
ipone=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#绑定本机的IP地址和端口,注意IP和端口是放在元组中。
ipone.bind(('127.0.0.1',8080))
#listen(5)表示一个backlog<半链接池>中,意思就是允许5个客户端连接同时进来,就像手机可以同时进来两个电话
# 此处可根据实际调整数字大小
#backlog的作用很大,比如SYN洪水攻击的时候,就可以通过调大backlog的数字来预防。
ipone.listen(5)
#等待客户端发送消息,此处会等待客户端发送消息后才会往下运行程序。
conn,addr=ipone.accept()
#接收消息并赋值给变量msg,其中1024代表最大允许接收1024字节的内容。
msg=conn.recv(1024)
print('客户端发来的消息内容是:',msg)
#发送消息给客户端
conn.send(msg.upper())
#关闭conn连接
conn.close()
#关闭socket
ipone.close()

**客户端代码:**
import socket
ipone=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
ipone.connect(('127.0.0.1',8080))
#把字符串转换成utf-8类型的二进制数据,客户端和服务端通信从底层来说就是传输的二进制数据。
ipone.send('hello'.encode('utf-8'))
data=ipone.recv(1024)
print('服务端发送过来的消息内容是:',data)

标签:socket,--,编程,ipone,conn,接字,服务端,客户端
From: https://www.cnblogs.com/kkbest/p/18342186

相关文章

  • 编程常用英语单词中英文对照表
    distributed美[dɪˈstrɪbjuːtɪd] 使分布;  分配;  分发;  分销;  分散;  使散开; program 美[ˈproʊɡræm] 程序;  编码指令; BASIS  基础;  标准;  基本;  ASIS 按原来的softwarepackage 美[ˈsɔːftwerpækɪdʒ......
  • 一文学会CUDA编程:深入了解CUDA编程与架构(一)
    前言:CUDA(ComputeUnifiedDeviceArchitecture,统一计算设备架构)是由NVIDIA公司开发的一种并行计算平台和编程模型。CUDA于2006年发布,旨在通过图形处理器(GPU)解决复杂的计算问题。在早期,GPU主要用于图像处理和游戏渲染,但随着技术的发展,其并行计算能力被广泛应用于科学计算、工程......
  • Shell编程 --基础语法(2)
    文章目录Shell基础语法运算符算术运算符关系运算符bool运算符逻辑运算符字符串运算符文件测试运算符read命令printf命令总结ShellShell编程Shell是一种程序设计语言。作为命令语言,它交互式解释和执行用户输入的命令或者自动地解释和执行预先设定好的一连串的命令;......
  • 2024“钉耙编程”中国大学生算法设计超级联赛(4)
    题面:https://files.cnblogs.com/files/clrs97/%E7%AC%AC%E5%9B%9B%E5%9C%BA%E9%A2%98%E9%9D%A2.pdf题解:https://files.cnblogs.com/files/clrs97/%E7%AC%AC%E5%9B%9B%E5%9C%BA%E9%A2%98%E8%A7%A3.pdf Code:A.超维攻坚#include<cstdio>constintN=15,inf=~0U>>......
  • Continue-AI编程助手本地部署llama3.1+deepseek-coder-v2
    领先的开源人工智能代码助手。您可以连接任何模型和任何上下文,以在IDE内构建自定义自动完成和聊天体验推荐以下开源模型:聊天:llama3.1-8B推理代码:deepseek-coder-v2:16b嵌入模型nomic-embed-text模型默认存储路径:C:\Users\你的用户名\.ollama\models\blobs模型离线下......
  • Android ImageProxy 到 byteArray 并通过套接字发送
    我正在尝试将ImageProxy转换为byteArray,以通过套接字将其发送到python服务器。我正在使用Camerax,这是我的图像分析:mageAnalysisimageAnalysis=newImageAnalysis.Builder().setTargetResolution(newSize(720,640))......
  • 通过套接字将子进程输出按时间线逐行发送到前端失败
    这是我的代码:defenqueue_output(file,queue):forlineiniter(file.readline,''):queue.put(line)file.close()defread_popen_pipes(p):withThreadPoolExecutor(2)aspool:q_stdout,q_stderr=Queue(),Queue()......
  • Python 请求 POST 请求与 websockets 库一起使用时挂起
    我使用Python中的requests库发送POST请求,同时维护与websockets库的WebSocket连接:importasyncioimportrequestsimportwebsocketsasyncdefwebsocket_handler(uri):asyncwithwebsockets.connect(uri)aswebsocket:whileTrue:me......
  • Python | 函数式编程
    文章目录1函数式编程2lamda表达式(匿名函数)3偏函数4闭包和自由变量5内置函数5.1map()函数5.2reduce()函数5.3filter()函数5.4sorted函数1函数式编程函数式编程(functionalprogramming)其实是个很古老的概念,诞生距今快60年啦!最古老的函数式编程语言Lisp......
  • 【C++核心篇】—— C++面向对象编程:封装相关语法使用和注意事项详解(全网最详细!!!)
    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、封装(类)1.封装的使用(类和对象)2.对象的初始化和清理2.1构造函数2.2析构函数2.3构造函数的分类及调用3.深拷贝与浅拷贝4.C++对象模型和this指针5.友元6.运算符重载前言在本篇......