UDP协议

UDP:用户数据报协议,不可靠性,只是把应用程序传给IP层数据报送出去,但是不能保证他们是否能到达目的地,传输数据报钱不用再客户端和服务器之间建立连接,并且没有超时重发机制,所以传输速度快。

UDP特点

-安全性差不稳定,没有顺序, 大小限制64KB内 -速度快

TCP协议

tcp通信,再通讯之前,一定要先建立相关链接,才能发送数据

三次握手

第一次握手:主机A发送位码为syn=1,随机产生seq number=1234567的数据包到服务器,主机B由SYN=1知道,A要求建立联机;

第二次握手:主机B收到请求后要确认联机信息,向A发送ack number=(主机A的seq+1),syn=1,ack=1,随机产生seq=7654321的包

第三次握手:主机A收到后检查ack number是否正确,即第一次发送的seq number+1,以及位码ack是否为1,若正确,主机A会再发送ack number=(主机B的seq+1),ack=1,主机B收到后确认seq值与ack=1则连接建立成功。

完成三次握手,主机A与主机B开始传送数据。

标志控制

ACK:确认标志
SYN:同步标志
FIN:结束标志

TCP特点

  • 安全性高,稳定性好,有序
  • 速度相对较慢

什么是Socket

socket(简称 套接字)是一个网络通信的端点,它能实现不同主机间的进程通信,我们网络上各种各样大多数都是基于Socket来完成的通讯

网络中进程之间如何通讯呢

首要解决的问题是如何确定你要和对方电脑上哪个进程进行通讯

利用协议,IP地址,端口标识网络的进程,然后通着这些标识进行通讯

socket--UDP网络通讯

使用socket创建UDP通讯的过程很简单,如下图:

1.创建套接字
2.绑定
3.接收消息
4.回复消息
5.关闭套接字 import socket
 # 1.创建套接字
udp_socket=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) # 2.绑定端口
udp_socket.bind(('',7852)) # 3.接收消息
data,addr=udp_socket.recvfrom(1024)
print('>>:'+(data.decode('utf-8'))) # 4.返回消息
udp_socket.sendto(senInput.encode('utf-8'),addr) # 5.关闭套接字
udp_socket.close()
客户端 1.创建套接字
2.发送数据
3.接收
4.关闭套接字 import socket
# 1.创建套接字
udp_socket=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) # 2.发送消息
data = "你吃了吗"
udp_socket.sendto(data.encode('utf-8'),('192.168.194.1',7852)) # 3.接收服务器返回的消息
data,addr=udp_socket.recvfrom(1024)
print(data.decode('utf-8')) # 4.关闭套接字
udp_socket.close()

Socket--TCP网络通讯

TCP通讯过程

服务端

1.创建套接字
2.绑定
3.监听
4.接收
5.关闭套接字
 import socket

 # 1.创建
tcp_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM) # 2.bind()绑定
tcp_socket.bind(('',7852)) # 3.listen()监听
tcp_socket.listen() # 4.accept()接受数据
s,addr=tcp_socket.accept()
data=s.recv(1024)
print(data.decode('utf-8')) # 5.关闭
s.close()
tcp_socket.close()
客户端 1.创建
2.connect()连接
3.发送
4.关闭套接字 import socket # 1.创建套接字
tcp_cocket=socket.socket(socket.AF_INET,socket.SOCK_STREAM) # 2.建立连接
tcp_cocket.connect(('192.168.194.1',7852)) # 3.发送数据
tcp_cocket.send('吃了吗'.encode('utf-8')) # 4.关闭套接字
tcp_cocket.close()
使用Socket--udp实现简单的聊天软件 服务端 import socket
from threading import Thread # 定义处理接受消息的线程
def recfunc():
global addr
data,addr=s_udp.recvfrom(1024)
print('>>:'+(data.decode('utf-8'))) # 定义处理发送消息的线程
def sendfunc():
dataInput=input('<<:')
s_udp.sendto(dataInput.encode('utf-8'),addr)
s_udp = None
addr =None # 定义主函数功能
def min():
global s_udp
s_udp=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
s_udp.bind(('',8752)) while True:
hr = Thread(target=recfunc())
hs = Thread(target=sendfunc()) hr.start()
hs.start() hr.join()
hs.join()
s_udp.close() min()
客户端 import socket
from threading import Thread # 1.收数据,打印
def recData():
while True:
data,addr=udpsocket.recvfrom(1024)
print('>>'+(data.decode('utf-8'))) # 2.发数据
def sendData():
while Thread:
senInput=input('<<:')
udpsocket.sendto(senInput.encode('utf-8'),(destIp,destPort))
udpsocket = None
destIp = ''
destPort = 0
def min():
global udpsocket
global destIp
global destPort
destIp = input('对方的IP:')
destPort=int(input('对方的端口号:'))
udpsocket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
udpsocket.bind(('',7853)) tr = Thread(target=recData)
th = Thread(target=sendData) tr.start()
th.start() tr.join()
th.join()
udpsocket.close() min()


兄弟连学python---Socket介绍的更多相关文章

  1. day10学python socket用户交互+MD5加密

    socket用户交互+MD5加密 利用socket从client传输文件指令于server 再返还字节大小与内容 socketserver的使用(重要) 注意: ##client.recv(1024) ...

  2. 尚学python课程---12、python语言介绍

    尚学python课程---12.python语言介绍 一.总结 一句话总结: 1.操作简单:简便计算:允许通过单个“import”语句后跟一个函数调用来完成复杂的计算.虽慢 2.库丰富:比如人工智能和 ...

  3. 从零开始学Python第0周:Python基本介绍(部分内容来源于网络)

    Python入门介绍 一,Python的基本介绍 (1)概要 Python是一种解释型,面向对象,动态数据类型的高级程序设计语言.常被广泛用于处理系统管理任务和web编程.现如今Python已经成为了 ...

  4. Python Socket 网络编程

    Socket 是进程间通信的一种方式,它与其他进程间通信的一个主要不同是:它能实现不同主机间的进程间通信,我们网络上各种各样的服务大多都是基于 Socket 来完成通信的,例如我们每天浏览网页.QQ ...

  5. 【转】Python Twisted介绍

    Python Twisted介绍 作者:Jessica McKellar 原文链接 Twisted是用Python实现的基于事件驱动的网络引擎框架.Twisted诞生于2000年初,在当时的网络游戏开 ...

  6. D10——C语言基础学PYTHON

    C语言基础学习PYTHON——基础学习D10 20180906内容纲要: 1.协程 (1)yield (2)greenlet (3)gevent (4)gevent实现单线程下socket多并发 2. ...

  7. Python——Socket 编程教程

    这是用来快速学习 Python Socket 套接字编程的指南和教程.Python 的 Socket 编程跟 C 语言很像. Python 官方关于 Socket 的函数请看 http://docs. ...

  8. Python Socket 网络编程 (客户端的编程)

    Socket 是进程间通信的一种方式,它与其他进程间通信的一个主要不同是:它能实现不同主机间的进程间通信,我们网络上各种各样的服务大多都是基于 Socket 来完成通信的,例如我们每天浏览网页.QQ ...

  9. 小白学 Python 爬虫(6):前置准备(五)爬虫框架的安装

    人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Li ...

  10. 小白学 Python 爬虫(11):urllib 基础使用(一)

    人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Li ...

随机推荐

  1. 编码 decode & encode

    import sys # python3 中字符编码默认为 utf-8 s = '你好' print(s) # utf-8 转为 gbk (s 默认为 unicode 所以可以直接 encode 成 ...

  2. easyui combobox模糊搜索

    combobox实现模糊搜索功能 <input class="easyui-combobox" id="hybq_PADD" name="hyb ...

  3. VM虚拟机拍摄快照时出错或者克隆失败解决办法

    在换了固态硬盘后,下载好VM,装虚拟机,结果克隆虚拟机和拍摄快照时出问题了. 拍摄快照时出错或者隆失败出现参数错误如图: 所提供的参数中有一个无效参数 解决办法 出现这个问题一般是在机械硬盘的电脑上面 ...

  4. mybatis支持jdk8等localdate类型

    大家知道,在实体Entity里面,可以使用java.sql.Date.java.sql.Timestamp.java.util.Date来映射到数据库的date.timestamp.datetime等 ...

  5. 编译libcurl支持https协议

    编译与安装参考:http://www.cnblogs.com/openiris/p/3812443.html 注意事项:先下载安装完nasm和perl再打开控制台(需要将nasm安装路径添加到Path ...

  6. div上下切换(新增、删除、上下div切换)

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...

  7. 推理机Jess,Racer,Jena

    推理机 Jess(Java Expert Shell System)是基于Java语言的CLISP推理机. CLISP是基于产生式的前向推理引擎,许多上层的推理任务,都要映射到这个推理引擎上来运行. ...

  8. IP通信基础课堂笔记----第三章(自认为的重点)

    网络层协议IP IP数据包格式:固定部分        {  标识(16):计数器,源站每发送一个分组,标识+1:源IP地址的标识是全网唯一的. (包含TCP/UDP首部)  |  标志(3):当最低 ...

  9. The eventual following stack trace is caused by an error thrown for debugging purposes as well as to attempt to terminate the thread which caused the illegal access, and has no functional impact.

    好久没有冒泡了,最近在新环境上搭建应用时,启动报错: INFO: Illegal access: this web application instance has been stopped alre ...

  10. RabbitMQ中声明交换器,队列时的,autoDelete=true自动删除的条件

    在声明交换器和队列时,有一个属性叫autoDelete,表示是否自动删除. 如果autoDelete=true,表示自动删除.此处我们要理解,自动删除的条件是什么? 这里的关键是,自动删除的条件是向后 ...