套接字与套接字编程

news2024/12/23 9:07:55

对于刚刚学习计算机网络:自顶向下的同学们,在观看了中科大的视频---TCP Socket以及UDP

Socket会感到些许疑惑,不过没事,在这篇小文章将会为你解开Socket的神秘面纱

什么是Socket?:

Socket 是一套用于不同主机之间通信的API,工作在TCP/IP协议栈之上(传输层)。

socket在牛津字典里译为---插座,插孔。 我们称呼的时候叫它套接字,但是去理解它的时候可以以这个插座,插孔来思考。

比如说,将小明的主机,比作电冰箱,而服务器主机比作插座;那么电冰箱要同电就需要插头(socket)将插座之间连接在一起,那么它们是不是就是实现了通电,类比的想,socket就是相当于小明的主机和服务器之间的那个socket,通过socket进行数据传输,这里的数据就相当于插座提供电---提供服务。   它们之间通过socket(套接字)相互交换数据。

怎么实现Socket

其实socket并不是一个新的事物,它只是一个对ip地址和port统一在一起的抽象概念。

IP地址用于唯一标志我们自己的网络设备 ---联想生活中寄快递(发件人地址,收件人地址)

端口用于区分主机上的不同应用 (发什么快递,到哪个驿站)

我们现在讲的是建立在 C/S模式架构的---TCP连接

具体的socket实现

首先我们来看看具体的服务端(server) 以及 客户端(client)的流程图

我们使用python具体实现socket,其他的主流语言也有socket。

对于服务端server

简易版

#现在是对于sever端的具体实现
#引入套接字库
import socket 

#创建服务端函数
def server():
    #创建套接字
    s = socket.socket()
    host = "127.0.0.1" #这个为本地IP地址
    port = 6666

    #绑定套接字
    s.bind((host,port))

    #监听
    s.listen(5)

#接收&处理套接字
    while True:
        #接收报文
        c, addr = s.appect()#接收客户端的连接 返回一个socket c 以及 客户端地址
        #回传报文
        print('Connect Addr', addr)
        #关闭服务端
        c.close()

if __name__ == '__main__':
    server()

 

 客户端Client(简易版)

#客户端client 创建
import socket

def client(i):
    #创建套接字
    s = socket.socket()
    
    #连接套接字
    s.connect(('127.0.0.1',6666)) #这里连接的是服务端的套接字{ip,port}

    #recv 指定接收长度
    print("REcv mas:%s, client:%d"%(c.recv(1024),i))
    s.close()

if __name__ == '__main__':
    for i in range(10):
        client(i)

以及还有复杂版的TCP编程:基于数据流的协议,发送出的数据会按顺序,完整的接收到

要求为C/S模式

要求:服务器原封不动回传客户端发来的信息

服务器端

import socket

with socket.socket(socket.AF_INET,socket.SOCK_STREAM) as s:
#AF_INET 代表我们使用的是 IPv4家族
#SOCK_STREAM 代表TCP协议 流式协议

    s.bind(('0.0.0.0',1234)) 
#参数一代表主机上的任意网卡都可以使用这个socket进行通信
    s.listen() #设置为监听状态,等待客户端连接

    c, addr = s.appect() 
#接收任意客户端连接 ,返回新socket c 和 地址 建立起连接
    
    with c:
        print(addr,"Conncetted")
        
        while True:
            data = c.recv(1024) #不断接收客户传来的数据 一次最大接收量为1024字节
            if not data:
                break
            c.sendall(data) #原封不断回传客户端

客户端:

import sokcet

#使用同样的方法创建socket
with socket.socket(socket.AF_INET,socket.SOCK_STREAM) as s:
    s.conncet(('127.0.0.1',1234))
    s.sendall(b"HELLO,ROSS") #发送信息给服务器 
#注意:这里的参数是字节序列,不是字符串,所以前面要加上一个b

    data = s.recv(1024) #接收服务器的消息
    print("Received",repr(data))

#基本上就实现了所有操作

Tips:

1.对于这个服务器,它只能同时处理一个客户端的请求

2.with是python中的语法糖,它单纯代表当代码离开with块的时候,自动调用s.close()来销毁这个socket

最后:TCP给你报信还要等你的回话,而UDP说完话就走,不管你在不在

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1466019.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2024年面试季,大前端相关开发者不妨了解一下鸿蒙开发岗

搜狐:我宣布与华为达成鸿蒙全面合作! 美团:我宣布与华为达成鸿蒙全面合作! 360 :我宣布与华为达成鸿蒙全面合作! 高德:我宣布与华为达成鸿蒙全面合作! 新浪:我宣布与华为…

java——特殊文件日志技术

目录 特殊文件Properties文件XML文件XML文件有如下的特点XML的作用和应用场景解析XML文件 日志技术概述日志技术的体系结构Logback日志框架概述快速入门核心配置文件logback.xml日志级别项目中使用日志框架 特殊文件 Properties文件 后缀为.properties的文件,称之…

探索D咖智能饮品机器人的工作原理:科技、材料与设计的相互融合

智能饮品机器人是近年来随着人工智能和自动化技术的发展而崭露头角的一种创新产品。它将科技、材料和设计相互融合,为消费者带来了全新的饮品体验。下面D咖来探索智能饮品机器人的工作原理,以及科技、材料和设计在其中的作用。 首先,智能饮品…

悄悄话花费的时间(C语言)

题目描述 给定一个二叉树,每个节点上站着一个人,节点数字表示父节点到该节点传递悄悄话需要花费的时间。 初始时,根节点所在位置的人有一个悄悄话想要传递给其他人,求二叉树所有节点上的人都接收到悄悄话花费的时间。 输入描述 …

企业统一身份中台,如何比传统单点登录SSO做得更好?

传统的单点登录SSO方案往往仅解决以下问题:多应用系统入口不统一,导致员工需要切换多个登录地址,重复多次登录,极大影响业务访问效率及员工登录体验。随着IT基础设施的增多,企业对全场景(如网络、VPN、云桌…

Jmeter基础(2) 目录介绍

目录 Jmeter目录介绍bin目录docsextrasliblicensesprintable_docs Jmeter目录介绍 在学习Jmeter之前,需要先对工具的目录有些了解,也会方便后续的学习 bin目录 examplesCSV目录中有CSV样例jmeter.batwindow 启动文件jmeter.shMac/linux的启动文件jmete…

flink内存管理,设置思路,oom问题,一文全

flink内存管理 1 内存分配1.1 JVM 进程总内存(Total Process Memory)1.2 Flink 总内存(Total Flink Memory)1.3 JVM 堆外内存(JVM Off-Heap Memory)1.4 JVM 堆内存(JVM Heap Memory)…

如何在Pycharm中导入第三方库(以pyecharts为例子)

打开Pycharm 点击右上角文件->设置->项目->pythonProject(Python解释器) 点击下图号 下一步:在搜索栏中直接搜索第三方包pyecharts并安装即可 以上便为使用Pycharm安装第三方库的全过程。 温馨小提示,如果大家在Pychar…

研学活动报名平台系统功能清单

中小学生社会实践活动、研学旅行等素质教育活动报名与管理平台,功能包含:活动分类,活动管理,在线报名缴费,扫码核销,会员特权体系,在线商城,研学互动。系统支持入驻老师自行创建研学…

代码随想录算法训练营第二十六天|39. 组合总和、40.组合总和II、131.分割回文串

39. 组合总和 刷题https://leetcode.cn/problems/combination-sum/description/文章讲解https://programmercarl.com/0039.%E7%BB%84%E5%90%88%E6%80%BB%E5%92%8C.html视频讲解https://www.bilibili.com/video/BV1KT4y1M7HJ/?vd_sourceaf4853e80f89e28094a5fe1e220d9062 回溯…

【数据分享】2014-2024年全国监测站点的逐年空气质量数据(15个指标\免费获取)

空气质量的好坏反映了空气的污染程度,在各项涉及城市环境的研究中,空气质量都是一个十分重要的指标。空气质量是依据空气中污染物浓度的高低来判断的。 我们发现学者王晓磊在自己的主页里面分享了2014年5月以来的全国范围的到站点的逐时空气质量数据&am…

【Python笔记-设计模式】组合模式

一、说明 组合模式是一种结构型设计模式, 你可以使用它将对象组合成树状结构, 并且能像使用独立对象一样使用它们。 (一) 解决问题 处理树形结构:可以很好地处理树形结构的数据,使得用户可以统一对待单个对象和对象组合。统一接…

【LeetCode每日一题】 单调栈的案例 42. 接雨水

这道题是困难,但是可以使用单调栈,非常简洁通俗。 关于单调栈可以参考单调栈总结以及Leetcode案例解读与复盘 42. 接雨水 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 示例 …

2 物理层(五):传输介质

目录 1 传输介质1.1 有线传输媒体1、双绞线2、同轴电缆3、光纤 1.2 无线传输媒体1、无线电波段分配2、微波通信3、卫星通信4、红外通信和激光通信 1 传输介质 物理层传输的二进制比特流需要在传输介质上实现。传输介质是数据传输的物理通道,它还能连接主机和各种网…

【JAVA】中的静态代理、动态代理以及CGLIB动态代理

目录 1.静态代理 2.动态代理 3.cglib代理 代理模式是java中最常用的设计模式之一,尤其是在spring框架中广泛应用。对于java的代理模式,一般可分为:静态代理、动态代理、以及CGLIB实现动态代理。 对于上述三种代理模式,分别进行…

Kubernetes 二进制部署 《easzlab / kubeasz项目部署》(一)

Kubernetes 二进制部署 - easzlab / kubeasz项目部署 1. 准备工作1.1 设置防火墙1.2 设置SeLinux1.3 设置时区及时间同步1.4 配置域名解析1.5 确认SSH开启1.6 IP转发1.7 安装docker1.8 关闭swap 2. 服务器规划2.1 基本架构图2.2 官方建议2.3 实践服务器规划 3. 服务器配置3.1 配…

基于MPPT最大功率跟踪算法的涡轮机控制系统simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 5.完整工程文件 1.课题概述 基于MPPT最大功率跟踪算法的涡轮机控制系统simulink建模与仿真.mppt采用爬山法实现,仿真输出MPPT控制效果,功率,转速等。 2.系统仿真结果 …

SQL注入漏洞解析--less-2

首先我们进入第二关 思路: 1.先判断是什么类型的注入 2.根据类型我们在找注入点 步骤: 1.提示我们输入id数字,那我们先输入1猜一下 2.这里正常回显,当我们后边加上时可以看到报错,且报错信息看不到数字&#xff0…

Go 中如何高效遍历目录?探索几种方法

嗨,大家好!我是波罗学。本文是系列文章 Go 技巧第十八篇,系列文章查看:Go 语言技巧。 目录遍历是一个很常见的操作,它的使用场景有如文件目录查看(最典型的应用如 ls 命令)、文件系统清理、日志…

知识积累(二):损失函数正则化与权重衰减

文章目录 1. 欧氏距离与L2范数1.1 常用的相似性度量 2. 什么是正则化?参考资料 本文只介绍 L2 正则化。 1. 欧氏距离与L2范数 欧氏距离也就是L2范数 1.1 常用的相似性度量 1)点积 2)余弦相似度 3)L1和L2 2. 什么是正则化&…