资讯专栏INFORMATION COLUMN

TCP/UDP简介

e10101 / 3354人阅读

摘要:是位的整数,以字符串形式表示地址,它是目前使用的的升级版,以字符串表示类似于。

基本概念
TCP   TCP(Transmission Control Protocol 传输控制协议)
UDP User Datagram Protocol的简称, 中文名是用户数据报协议
IP 网络之间互连的协议(IP)是Internet Protocol 协议 端口

协议:http https

TCP/IP协议:因为互联网协议本身就包含很多协议标准,但最重要的两个协议就是TCP和IP协议,所以互联网协议可以简称为TCP/IP协议

IP地址:如果想要连接一台电脑,我们就需要知道这台电脑的标识,互联网上为每台电脑都提供一个唯一的标识,这个标识就是ip地址,类似于123.123.123.123
IP地址对应的实际上是计算机的网路接口

IP协议:负责把数据从一台计算机上通过协议发送给另一条计算机,数据会被切割成一小块一小块,通过IP包发送出去

IP包的特点:本身是以块的形式发送数据,但不保证能够全部到达,也不能保证按顺序到达

TCP协议:建立在IP协议之上,TCP协议负责把两台计算机之间建立可靠连接,保证数据按顺序到达,
如果数据包丢失,会自动重新发送

IP地址
IPv4:是32位的整数,以字符串形式表示ip地址,以字符串表示的IP地址如192.168.0.1实际上是把32位整数按8位分组后的数字表示,目的是便于阅读。
123.123.123.123 0-255.0-255.0-255.0-255

IPv6: 是128位的整数,以字符串形式表示ip地址,它是目前使用的IPv4的升级版,以字符串表示类似于2001:0db8:85a3:0042:1000:8a2e:0370:7334。

端口:为了区分不同的程序

一个完整的IP地址:
协议 IP 端口号
http://10.31.157.61:8080
电脑服务器默认值端口80,人为重新设置端8080

链接新浪客户端
# socket 套接字
# 通常我们用一个Socket表示“打开了一个网络链接”,而
# 打开一个Socket需要知道目标计算机的IP地址和端口号,再指定协议类型即可
"""

客户端:向服务器发送请求,接受服务器的数据
服务器:接受客户端的数据,发送给客户端数据

"""

import socket
# 1.创建一个socket对象
# 参数一:指定协议,AF_INETH或AF_INET6 (IPv4, IPv6)
# 参数二:SOCK_STREAM 使用TCP协议  以流的形式发送或接收数据
socket1 = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 2.建立连接
# connnect的参数为一个元组类型的额数据,第一个是IP 第二个是端口号
socket1.connect(("www.sina.com.cn", 80))


# 3 发送请求,要求请求新浪首页的内容并返回该内容
# send的参数为字节类型
"""
GET/HTTP/1.1
GET:表示的是一种请求方式,将从服务器直接获取数据(网址必须是完整的)
# 请求方式通常使用两种:GET, POST
# 其他的请求方式:PUT DELETE
/ : 表示的是url路径,url总是以/开始
HTTP/1.1: 协议版本, HTTP协议,版本1.1 目前也有支持1.0的版本的服务器
1.0和1.1的区别:1.1版本允许多个HTTP请求一个TCP链接,可以加快传输速度


Host: www.sina.com.cn:请求地址为www.sina.com.cn 如果一个服务器有多个网站
服务器需要使用Host来区别浏览器请求的地址

Connection:close 当服务器发送给客户端数据之后就自动断开连接


: 每一个请求头(header)使用
分开的


:表示Header结束 后面都是Body(请求体)部分


"""
socket1.send(b"GET / HTTP/1.1
Host: www.sina.com.cn
Connection: close

")

# 4. 接受数据
data = []
while True:
    # recv:接受数据 1024:每次允许接收1K的数据
    tmp = socket1.recv(1024)
    if tmp:
        data.append(tmp)
    else:
        break
# 5.拼接数据
# b""join() 按字节拼接 整体为字节类型bytes
dataStr = b"".join(data)

# 6.关闭连接
socket1.close()

header, html = dataStr.split(b"

", 1)
# 将字节解码(utf-8) 解码为字符串数据类型的数据
print(header.decode("utf-8"))


with open("sina.html",  "wb") as f:
    f.write(html)

TCP服务端
# TCP服务端

import socket
# 1.创建一个socket 用作服务端

server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 2.绑定一个IP地址及端口号

# 端口号的范围 1-65536
# ip 地址 端口号
server.bind(("10.31.157.15", 43998))

# 3.监听
# 传入的值在指定的拒绝链接之前允许链接的最大数,该值至少为1
# 大部分设置为5即可
server.listen(5)
print("Waiting for connection...")

# 4.等待客户端连接,会阻塞程序运行
# server.accept()  如果链接成功,会返回客户端的socket及address
clientSocket, clientAddress = server.accept()
print(clientSocket)
print(clientAddress)

while True:
    # 5.接受客户端数据
    data = clientSocket.recv(1024)
    print("客户端说:",data.decode("utf-8"))

    # 6.发送数据给客户端
    sendDate = input("请输入想要发送的内容:")
    clientSocket.send(sendDate.encode("utf-8"))
TCP客户端
# TCP 客户端

import socket

# 1.创建一个socket:用于客户端

client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 2.创建链接:链接服务器
client.connect(("10.31.157.15", 43998))


while True:
# 3.客户端发送给服务器端信息
    dataStr = input("请输入想要发送给服务器的内容")
    client.send(dataStr.encode("utf-8"))
    # 客户端接受服务器端的信息
    data = client.recv(1024)
    print("服务器说:", data.decode("utf-8"))

多线程服务器
import socket
from threading import Thread # 线程

server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(("10.31.157.15", 43998))
server.listen(5)
print("Waiting for connection...")
# 等待客户端连接

def chat(client, address):
    while True:
        data = client.recv(1024)
        print("客户端",address,":", data.decode("utf-8"))
        sendData = input("服务器说:")
        client.send(sendData.encode("utf-8"))



# 等待客户端连接
while True:
    clientSock, clientAddress = server.accept()
    print(clientAddress)
    # 接收数据,发送数据放到线程
    threadChat = Thread(target=chat, args=(clientSock, clientAddress))
    # 启动线程
    threadChat.start()
UDP介绍

TCP: 是建立可靠链接,服务器及客户端都可接受发送数据
UDP : 不需要建立可靠链接,只需要知道对方的IP地址及端口号即可
UDP可以直接发送数据,但对方能不能接收就不一定了

UDP的链接不可靠,但与TCP相比,速度快,对于需求不高的数据可以使用UDP

飞秋群发
import socket
# UDP SOCK_DGRAMY以包的形式传输数据
socket1 = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

str1 = "1_lbt4_10#32499#002481627512#0#0#0:1289671407:名字:备注:288:发送的内容"

for i in range(1,255):
    address = ("10.31.162.%s"%(i),2425)
    socket1.sendto(str1.encode("gbk"), address)
UDP服务器
import socket

# 1.创建socket

server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

# 2.绑定
server.bind(("10.31.157.15", 39999))


while True:
    # 3.接受数据 recvfrom
    data, address = server.recvfrom(1024)
    print(address,"说:", data.decode("utf-8"))
    # 4.发送数据
    sendStr = input("发送的数据为:")
    server.sendto(sendStr.encode("utf-8"), address)

UDP客户端
import socket
client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
print("Waiting for connection...")
while True:
    # 发送数据
    sendStr = input("客户发送:")
    client.sendto(sendStr.encode("utf-8"), ("10.31.157.15", 39999))
    # 接收数据
    data, address = client.recvfrom(1024)
    print(address, "服务端说:", data.decode("utf-8"))





文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/41643.html

相关文章

  • 【私有网络 UVPC】网络ACL简介,ACL规划已经操作指南

    摘要:关联子网创建网络后,用户可将该与所属下的任意子网进行绑定和解绑。支持子网内全部资源子网内指定资源。因此需要额外添加一条针对同子网网段的放行规则。网络网络是子网级别的安全策略,用于控制进出子网的数据流。网络ACL简介网络ACL是子网级别的安全策略,用于控制进出子网的数据流。用户可以通过设置出站规则和入站规则,对进出子网的流量进行精确控制。网络ACL是无状态的,例如用户如果需要允许某些访问,则需...

    Tecode 评论0 收藏0
  • Android 面试必备 - 计算机网络基本知识(TCPUDP,Http,https)

    摘要:在网络层有协议协议协议协议和协议。而且,因为有确认机制三次握手机制,这些也导致容易被人利用,实现等攻击。没有的这些机制,较被攻击者利用的漏洞就要少一些。但也是无法避免攻击的,比如攻击缺点不可靠,不稳定。 简介 HTTP协议(超文本传输协议)和 UDP(用户数据包协议),TCP 协议(传输控制协议) TCP/IP是个协议组,可分为四个层次:网络接口层、网络层、传输层和应用层。在网络层有I...

    My_Oh_My 评论0 收藏0
  • 网络ACL简介 私有网络 UVPC

    摘要:网络简介网络简介本篇目录关联子网关联子网出站入站规则出站入站规则产品配额产品配额网络是子网级别的安全策略,用于控制进出子网的数据流。用户对网络规则的更新,会自动应用到与其相关联的子网。支持子网内全部资源子网内指定资源。 网络ACL简介本篇目录关联子网出站/入站规则产品配额网络ACL是子网级别的安全策略,用于控制进出子网的数据流。用户可以通过设置出站规则和入站规则,对进出子网的流量进行精确控制...

    ernest.wang 评论0 收藏171

发表评论

0条评论

最新活动
阅读需要支付1元查看
<