专栏首页python3网络编程知识-socket

网络编程知识-socket

一、 C/S 架构:Client/Server   客户端/ 服务端

  B/S 架构:Browser/Server  前端/ 服务端

二、网络编程通信流程

  网卡--> mac地址-->ip地址-->子网掩码-->网关-->DNS服务器(进行域名domain name 和与之相对应的ip地址转换的服务器)

  DHCP(自动分配IP)  NAT(网络地址转换) 端口  路由器

  交换机  集线器   广播 单播 广播风暴   arp协议  路由协议

三、网络通信协议

  1.                  TCP五层通信                             OSI七层通信

   网络通信协议是网络传输的灵魂,非常重要,协议即准则,准则是传输消息的格式要求。

  2. TCP/IP 协议存在:传输层

    TCP:面向连接,消息可靠,效率相对差,<面向流的消息格式>,无消息保护边界,比如:打电话、web浏览器、文件传输程序

    UDP:  面向无连接,消息不可靠,效率高,<面向包的消息格式>,有消息保护边界,域名系统(DNS)、视频流、IP语音(VoIP)

    TCP三次握手:

      1. client --> [SYN] --> server    client请求建立连接

      2. client <--[SYN/ACK] <--server   server收到syn 发送[SYN/ACK]确认

      3. client --> [ACK] --> server  client收到[SYN/ACK]再发一个[ACK]确认

    TCP四次挥手:

      1.  client --> [ACK/FIN] --> server    client发送包,请求关闭

      2.  client <--[ACK] <-- server   server收到包,同意关闭

      3.  clinet <-- [ACK/FIN] <-- server   server收到包,client是否收到 同意关闭 消息

      4.  client -->[ACK/FIN] --> server  client发送确认收到 关闭包

四、基于TCP和UDP两个协议下socket通讯流程

概念: Socket 是任何一种计算机网络通讯中最基础的内容,它是 [应用层] 和 TCP/IP协议簇通信的中间软件抽象层,它是一组接口。

  套接字有两种:

        基于文件类型:AF_UNIX

        基于网络类型:AF_INET ----  使用最广泛的一个         这里还有一个AF_INET6 被用于ipv6

   TCP和UDP对比:

      TCP:是面向流的,如果多次发送的数据很小,并且每次发送间隔时间很短,就有可能会被拼到一个数据流里面。TCP是有序的,可以一段一段取值,只能从头开始

      UDP:是面向包的,udp不能取半个包,会报错,如果数据包很大,那么一次性接收的时候,设置的接收大小也要很大,否则会报错,缓冲区错误。

  TCP和UDP下socket差异对比图:

1. TCP协议下的Socket  

server端    

import socket

server = socket.socket()  #创建了一个socket对象

ip_port = ("127.0.0.1",8080)

server.bind(ip_port) #将套接字绑定到地址

server.listen()  #监听ip地址和端口

conn,addr = server.accept()   #阻塞住,等待连接

from_client_msg = conn.recv(1024)  #接收消息#1024为消息大小,单位B,MB=1024KB,1KB=1024B

from_client_mst = from_client_msg.decode("utf-8") #接收的消息是bytes类型,需要转换为字符串

print(from_client_msg)

conn.send("人生苦短".encode("utf-8"))  #发送消息

conn.close()  #关闭连接
server.close()

tcp_server.py

client端:

import socket

client = socket.socket()

server_ip_port = ("127.0.0.1",8080)

client.connect = (server_ip_port)   #连接服务器端

client.send("我用python".encode("utf-8")) #发送消息 #send里面的消息必须是字节类型的

from_server_msg = client.recv(1024)

from_server_msg = from_server_msg.decode("utf-8")

print(from_server_msg)

client.close()

View Code

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • python3--元组(tuple),列表(list),字典dict,其它(for,enumerate,range)

    元组被称为只读列表,即数据可以被查询,但不能被修改,所以,字符串的切片操作同样适用于元组

    py3study
  • Python实现socket信息发送和监

    最近在研究boost C++库,用于工作中处理大规模高并发TCP连接数据响应,想测试,也可以用boost::asio库来写,但不利于测试代码的灵活修改。

    py3study
  • python异常处理--try...except

    在python中,用try来测试可能出现异常的语句,然后用except来处理可能出现的异常,try except的表达形式如下:

    py3study
  • Socket Programming in Python(Guide)

    Sockets 和 socket API被用于在网络上发送消息。它们提供了进程间通信(IPC)的一种形式。而网络既可以是连接到计算机的本地网络,也可以是计算机被...

    lesM10
  • NPS详情

    由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,雷神众测以及文章作者不为此承担任何责任。 雷神众测拥有对此文章的修改和...

    安恒网络空间安全讲武堂
  • 客户端断连,服务端也断?

    在socket网络编程中,如果此时客户端忽然由于某种原因断开连接或者崩溃,服务端没有处理好,便会同时崩溃掉,本篇文章将会从崩溃到问题分析,解决,一步步入手。

    公众号guangcity
  • 程序员如何用gRPC谈一场恋爱

    ? 导语: 本文以幽默诙谐的方式,介绍gRPC的4种client-server服务模式的开发实践及应用场景 前言:为什么要写这篇文章? The best wa...

    腾讯技术工程官方号
  • WebSocket系列之socket.io

    上篇讲了WebSocket基础知识和浏览器端的实现,WebSocket server和http server也是有区别的,这篇开始讲nodejs平台的一个很成熟...

    肖乐
  • 【收藏】JavaScript DOM操作简易速查手册

    本文中简要罗列了JavaScript操作Dom的基本方法,其中包括元素查询、文档结构遍历、属性及内容操作、创建节点、插入节点及删除节点等内容。虽然JQuery更...

    毛瑞
  • python3--元组(tuple),列表(list),字典dict,其它(for,enumerate,range)

    元组被称为只读列表,即数据可以被查询,但不能被修改,所以,字符串的切片操作同样适用于元组

    py3study

扫码关注云+社区

领取腾讯云代金券