广告
返回顶部
首页 > 资讯 > 后端开发 > Python >网络编程-SOCKET开发
  • 866
分享到

网络编程-SOCKET开发

网络编程SOCKET 2023-01-31 00:01:54 866人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

网络编程-Socket开发 B/S架构        B指的是WEB(网页),S指的是Server(服务端软件) C/S架构        C指的是Client(客户端软件),S指的是Server(服务端软件) OSI七层模型设计的目

网络编程-Socket开发

B/S架构

       B指的是WEB(网页),S指的是Server(服务端软件)

C/S架构

       C指的是Client(客户端软件),S指的是Server(服务端软件)

OSI七层模型设计的目的

是成为一个所有计算机厂商都能实现的开放网络模型,来克服使用众多私有网络模型所带来的困难和低效性。

tcp/IP五层模型:

     应用层(表示层、会话层)Http协议

              大概是OS操作系统,系统软件等用户层面的。

     传输层(TCP/UDP协议、端口、四层路由器、四层交换机)

              建立端口到端口的通信,有两种传输方式

              TCP协议:

                     TCP是全双工的通信方式,可靠传输,速度慢,对传递的数据的长短没有限制,只要不得到确认,就重新发送数据报,直到收到确认。

                     TCP的三次握手和四次挥手

 

 

SYN::同步标志(请求连接)

ACK:确认标志

FIN:结束标志

              UDP协议:

                     UDP无需连接,不可靠,速度快,传输内容长度有限制。

     网络层(IP协议、路由器、三层交换机)

         IP协议

                     IP v4、IP v6

                     IP地址根据网络ID的不同分为五种类型,分别为A、B、C、D、E类地址

  1. A类:1.0.0.0-126.0.0.0
  2. B类:128.0.0.0-191.255.255.255
  3. C类:192.0.0.0-223.255.255.255
  4. D:用于多点广播)
  5. E类:保留

*特殊:0.0.0.0-当前主机     255.255.255.255-当前子网的广播地址       127.0.0.1-本机地址,又称回环地址。

     数据链路层(ARP协议、Mac地址相关、网卡、交换机)

              ARP协议:地址解析协议,确定目标物理地址

              MAC地址:机器唯一标识

     物理层(网线)

       socket是应用层与TCP/IP协议族通信的中间软件抽象层,相当于一组接口。引用此接口可以实现TCP连接。

socket server端实例代码:

import socket        #导入socket接口

receive = socket.socket()
receive.bind(('127.0.0.1', 9999))    #此处的127.0.0.1为IP地址,9999为端口号
receive.listen()    #开始TCP监听
conn, addr = receive.accept()    #被动接收TCP客户端的连接,(阻塞)等待连接。
while True:
    conn.send('请输入用户名:'.encode('utf-8'))
    ret_user = conn.recv(1024).decode('utf-8')
    conn.send('请输入密码:'.encode('utf-8'))
    ret_psw = conn.recv(1024).decode('utf-8')
    if ret_user == 'zhao' and ret_psw == '123':
        conn.send('登录成功'.encode('utf-8'))
        break
    else:
        conn.send('用户名或密码输入错误'.encode('utf-8'))

conn.close()    #关闭套接字
receive.close()

 

socket client端实例代码:

import socket

receive = socket.socket()
receive.connect(('127.0.0.1', 9999))    #连接IP地址为127.0.0.1,端口为9999的主机

while True:
    print(receive.recv(1024).decode('utf-8'))
    user = input('>>>')
    receive.send(user.encode('utf-8'))
    print(receive.recv(1024).decode('utf-8'))
    psw = input('>>>')
    receive.send(psw.encode('utf-8'))
    ret = receive.recv(1024).decode('utf-8')
    if ret == '登录成功':
        print(ret)
        break
    else:
        print(ret)

receive.close()

 

公共用途的socket函数:

s.recv() 接收数据

s.send() 发送数据(send在待发送数据量大于己端缓存区剩余空间时,数据丢失,不会发完,可后面通过实例解释)

s.sendall() 发送完整的TCP数据(本质就是循环调用send,sendall在待发送数据量大于己端缓存区剩余空间时,数据不丢失,循环调用send直到发完)

s.recvfrom() 收到的内容为 内容+IP地址

s.close() 关闭套接字

s.getpeername() 连接到当前套接字的远端的地址

socket.setblocking(flag) #True or False,设置socket为非阻塞模式,以后讲io异步时会用

socket.getaddrinfo(host, port, family=0, type=0, proto=0,flags=0)返回远程主机的地址信息

socket.getfqdn() 拿到本机的主机名

socket.gethostbyname() 通过域名解析ip地址

黏包现象的解决

     黏包现象

              首先,黏包现象只出现在TCP传输中,由于某些原因经过TCP连续发送的信息在很短的时间内某个阶段粘连在一起发送,接收方接收到的是一条消息。

     造成黏包的原因

1. 在发送端由于两条消息发送的间隔时间很短,且两条消息本身也很短,在发送之前被合成了一条消息。

2. 在接收端由于接收不及时导致两条先后到达的信息在接收端黏在了一起。

黏包的本质

              信息与信息之间没有边界,且无法解决,因为TCP协议是流式传输。

解决黏包问题

              struct模块:

                     把任意长度的数字变成固定的4个字节。

l  简单形式(先发送数据长度,再发送数据)

l  相对规范并复杂的形式(把所有想发送的数据信息放在字典里,发送字典长度,发送字典,发送数据)

struct模块使用示例:

    发送:
    import struct
    ret=struct.pack(‘i’,10028)    #这里的’i’代表将int型10028打包
    sk.send(ret)
    接收:
    num=sk.recv(4)
    num=struct.unpack(‘I’,ret)[0]    #这里的’i’代表将ret中的内容解压为int型,必须加[0],因为它传过来的是元组。
    msg=conn.recv(num).decode(‘utf-8’)

 

socket.SOCK_DGRAM #UDP传输

实例:

server端:

import socket

while True:
    receive = socket.socket(type=socket.SOCK_DGRAM)
    receive.bind(('0.0.0.0', 9999))
    while True:
        msg, addr = receive.recvfrom(1024)
        ret = msg.decode('utf-8')
        if ret.upper() == 'Q':
            receive.sendto(bytes('您已断开连接!'.encode('utf-8')), addr)
            print('对方已与您断开连接!')
            break
        elif ret == '您已断开连接!':
            print(ret)
            break
        else:
            print(ret, addr)
        s = input('>>>').encode('utf-8')
        receive.sendto(bytes(s), addr)
receive.close()

 

client端:

import socket

receive = socket.socket(type=socket.SOCK_DGRAM)
while True:
    addr = input('输入要连接的ip地址:')
    addr_port = int(input('输入端口号:'))
    receive.connect((addr, addr_port))
    while True:
        n = input('>>>').encode('utf-8')
        receive.sendto(bytes(n), (addr, addr_port))
        msg = receive.recv(1024)
        ret = msg.decode('utf-8')
        if ret.upper() == 'Q':
            receive.sendto(bytes('您已断开连接!'.encode('utf-8')), (addr, addr_port))
            print('对方已与您断开连接!')
            break
        elif ret == '您已断开连接!':
            print(ret)
            break
        else:
            print(ret)
receive.close()

 

--结束END--

本文标题: 网络编程-SOCKET开发

本文链接: https://www.lsjlt.com/news/182174.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 网络编程-SOCKET开发
    网络编程-SOCKET开发 B/S架构        B指的是web(网页),S指的是Server(服务端软件) C/S架构        C指的是Client(客户端软件),S指的是Server(服务端软件) OSI七层模型设计的目...
    99+
    2023-01-31
    网络编程 SOCKET
  • python网络编程-socket编程
    一、服务端和客户端 BS架构 (腾讯通软件:server+client) CS架构 (web网站)   C/S架构与socket的关系: 我们学习socket就是为了完成C/S架构的开发   二、OSI七层模型 互联网协议按照功能不同分为...
    99+
    2023-01-31
    网络编程 python socket
  • python网络编程--socket
    1.服务端1.1声明socket对象server=socket.socket(AF.INET,socket.SOCK_STREAM)1.2绑定ip、端口server.bind(localhost,6969)1.3开始监听server.lis...
    99+
    2023-01-31
    网络编程 python socket
  • Python—网络编程Socket
    Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数...
    99+
    2023-01-31
    网络编程 Python Socket
  • C#网络编程之Socket编程
    目录一:什么是SOCKET套接字分类二:SOCKET相关概念1、端口2、协议2.1 TCP:2.2 UDP三:socket一般应用模式:四:SOCKET通信基本流程图:服务器端:客户...
    99+
    2022-11-13
  • 网络编程知识-socket
    一、 C/S 架构:Client/Server   客户端/ 服务端   B/S 架构:Browser/Server  前端/ 服务端       网卡--> mac地址-->ip地址-->子网掩码-->网关--...
    99+
    2023-01-31
    网络编程 知识 socket
  • python3网络编程之socket
      http://www.cnblogs.com/Bigtre/p/7261387.html...
    99+
    2023-01-31
    网络编程 socket
  • python socket 网络编程s
    Server端: import socketimport selectors class Server(object):def init(self,sel,sock):self.sel = selself.sock = sock def r...
    99+
    2023-01-31
    网络编程 python socket
  • 【网络编程】网络编程 和 Socket 套接字认识
    ✨个人主页:bit me👇 ✨当前专栏:Java EE初阶👇 目 录 🎧一. 网络编程基础🎺1. 为什么需要网络编程?🎷2....
    99+
    2023-08-23
    网络 服务器 java
  • [python网络编程]socket的简
    1 socket基本参数了解 1.在建立socket对象的时候,需要告诉系统两件事情1.1 通信的类型是什么(IPv4/IPv6等)1.2 使用的协议是什么?(TCP/UDP等) 2.各个通信类型和协议的标识2.1 IPv4:AF_INE...
    99+
    2023-01-31
    网络编程 python socket
  • 【计算机网络】Socket编程
    文章目录 理解源IP地址和目的IP地址理解端口号和进程ID理解源端口号和目的端口号认识TCP协议认识UDP协议网络字节序socket编程接口socket网址查看socket常见APIUDP协议...
    99+
    2023-10-20
    网络 服务器
  • 详解Python Socket网络编程
    Socket 是进程间通信的一种方式,它与其他进程间通信的一个主要不同是:它能实现不同主机间的进程间通信,我们网络上各种各样的服务大多都是基于 Socket 来完成通信的,例如我们每天浏览网页、QQ 聊天、...
    99+
    2022-06-04
    详解 网络编程 Python
  • python网络编程--socket简单
    python网络编程                                                                                                              ...
    99+
    2023-01-31
    网络编程 简单 python
  • Java 网络编程socket编程等详解
    网络编程是指编写运行在多个设备(计算机)的程序,这些设备都通过网络连接起来。java.net包中J2SE的API包含有类和接口,它们提供低层次的通信细节。你可以直接使用这些类和接口,来专注于解决问题,而不用关注通信细节。java.net包中...
    99+
    2023-05-31
    java 网络编程 socket编程
  • python之Socket网络编程详解
    什么是网络? 网络是由节点和连线构成,表示诸多对象及其相互联系。在数学上,网络是一种图,一般认为专指加权图。网络除了数学定义外,还有具体的物理含义,即网络是从某种相同类型的实际问题中抽象出来的模型。在计算机...
    99+
    2022-06-04
    详解 网络编程 python
  • Python网络编程之socket与socketserver
    目录一、基于TCP协议的socket套接字编程1、套接字工作流程1、 服务端套接字函数2、 客户端套接字函数3、 公共用途的套接字函数4、 面向锁的套接字方法5、 面向文件的套接字的...
    99+
    2022-11-11
  • Python基础:网络编程socket基
    socket也叫套接字,是对各种协议的封装,实现收发数据。Python里socket工作过程:(图片来自网络)socket在Python中实际上是一个模块,实现发送和接收数据的功能。因为socket是一个类,所以只导入模块需要使用socke...
    99+
    2023-01-31
    网络编程 基础 Python
  • 网络编程之socket的运用
    一,socket用法 socket是什么 ? Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,...
    99+
    2023-01-30
    网络编程 socket
  • linux网络编程socket的介绍
    这篇文章主要讲解了“linux网络编程socket的介绍”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“linux网络编程socket的介绍”吧!一.概念介绍网络程序分为服务端程序和客户端程序...
    99+
    2023-06-13
  • 详谈C++ socket网络编程实例
    目录功能源码效果总结 功能 实现基于sokcet的Cpp服务端 TIPS:功能包括接收客户端的数据,向客户端发送数据。 源码 #define _WINSOCK_DEPRECA...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作