首页 > 编程语言 >python_网络编程_socket

python_网络编程_socket

时间:2024-07-24 11:24:35浏览次数:18  
标签:协议 socket python ip 编程 TCP user data

一、网络编程的基本概念

通信协议:internet 协议,任何私有网络支持此协议,就可以接入互联网

二、七层协议与四层协议

从下到上分别是:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层

三、掌握TCP、IP协议

ip 协议是整个TCP、IP协议族的核心

IP 地址就是会联网上计算机的唯一标识

目前的ip地址有两种表示方式,IPV4 和 IPV6

ipconfig 可以查看本机的 ip 地址

TCP协议:传输控制协议,是建立在IP协议基础之上的,TCP协议负责两台计算机之间建立可靠连接,保证数据按顺序发送。是可靠的,一对一的,面向有连接的通信协议。

四、掌握UDP协议

UDP 协议:用户数据包协议。面向无连接的协议,只要知道对方的IP地址和端口,就可以直接发送数据包,因为是面向无连接的,无法保证数据一定会到达接收方

端口号:区分计算机中的运行的应用程序的整数,范围是0到65535,一共65536个。其中80个分配给HTTP 服务,21 个分给FTP服务

五、掌握socket套接字

六、TCP编程

TCP 服务器端流程:

1、使用socket 类创建一个套接字对象

2、使用bind 方法绑定IP地址和端口号

3、使用listen 方法开始TCP 监听

4、使用 accept 方法等待客户端的连接

5、使用recv() 和 send() 方法接受、发送数据

6、使用close 方法关闭套接字

# haha
# time:2024/6/30 16:16

# TCP 编程  ,AF_INET 用于internet 之间的进程通信,SOCK_STREAM 表示的是TCP协议编程
from socket import socket,AF_INET,SOCK_STREAM

#创建 socket 对象
server_socket = socket(AF_INET,SOCK_STREAM)

#绑定 IP 地址和端口
ip = '127.0.0.1'
port = 8888 # 端口号
server_socket.bind((ip,port))

#使用 listen 开始监听
server_socket.listen(5)  # 表示的最大连接数
print("服务器已经启动")

#等待客户端的连接
client_socket,client_addr = server_socket.accept() #系列解包赋值,分别赋值

#接受来自客户端的数据
data = client_socket.recv(1024)  #1024 表示要接受的最大数据量
print(data.decode('UTF-8'))  #解码

#发送数据

#关闭socket
server_socket.close()

TCP 客户端流程:

1、使用 socket 类创建一个套接字对象

2、使用 connect ((host,port))设置连接的主机ip 和主机设置的端口号

3、使用recv() send()方法接收数据、发送数据

4、使用close()关闭套接字

import socket

socket_user = socket.socket()

#绑定 IP 地址和端口
ip = '127.0.0.1'
port = 8888 # 端口号

socket_user.connect((ip,port))
print("与服务器的连接成功")


socket_user.send('hello nnnnnnnn'.encode('UTF-8')) #使用UTF-8 进行编码,

socket_user.close()

 

七、UDP编程

# haha
# time:2024/6/30 16:39
import socket

socket_user = socket.socket()

#绑定 IP 地址和端口
ip = '127.0.0.1'
port = 8888 # 端口号

socket_user.connect((ip,port))
print("与服务器的连接成功")

while(True):
    data = input()
    socket_user.send(data.encode('UTF-8'))  # 使用UTF-8 进行编码,
    if data == 'bye':
        print('结束通信')
        break
# socket_user.send('hello nnnnnnnn'.encode('UTF-8')) #使用UTF-8 进行编码,

socket_user.close()
# haha
# time:2024/7/1 10:50

from socket import socket,AF_INET,SOCK_DGRAM
rece_socket = socket(AF_INET,SOCK_DGRAM)


rece_socket.bind(('127.0.0.1',8899))

data,addr = rece_socket.recvfrom(1024)

print(data.decode('utf-8'))

send_data = input('请输入需要回复的数据')
rece_socket.sendto(send_data.encode('utf-8'),addr)

rece_socket.close()

标签:协议,socket,python,ip,编程,TCP,user,data
From: https://blog.csdn.net/qq_53066304/article/details/140658302

相关文章

  • 你能对 Python 类型注释进行模式匹配吗?
    你能在Python类型上进行模式匹配吗?我见过简单的例子:importbuiltinsmatchx:casebuiltins.str:print("matchedstr")casebuildins.int:print("matchedint")但我想在嵌套类型上进行模式匹配,比如Annotated[Optional[Literal["a",......
  • 某人有100,0000元,每经过一次路口,需要交费,规则如下: 1)当现金>50000时,每次交5% 2)当现
    1publicclassexercise08{2//编写一个main方法3publicstaticvoidmain(){4/*5某人有100,0000元,每经过一次路口,需要交费,规则如下:61)当现金>50000时,每次交5%72)当现金<=50000时,每次交100008编程计算该人可......
  • python Polars:替换嵌套列表的元素
    有谁知道是否可以有效地替换极坐标中嵌套列表的元素。例如:s=pl.Series('s',[[1,2,3],[3,4,5]])#replace3with10toget[[1,2,10],[10,4,5]]我已经尝试过s.to_frame().with_columns(pl.when(pl.col('s')==3)...)但是pl.when不喜欢List[bo......
  • 【RawSocket】RawSocket是什么?
    1.RawSocket简介RawSocket是数据链路层的socketRawsocket(原始套接字)是一种特殊的网络套接字类型,它允许应用程序直接发送和接收底层的网络数据包,而不需要经过标准的传输层协议(如TCP或UDP)的处理。以下是rawsocket的一些关键特点:直接访问网络层:Rawsocket允许应用程序直接......
  • 编程与大语言模型的冷知识,你知道几个?
    目录1.ASCII中的“Hello,World!”2.Python的缩进规则3.JavaScript的“undefined”与“null”4.C++中的“this”指针5.PHP的魔术方法6.Go语言的并发模型7.最早的编程“虫子”8.Hello,World!的起源9.goto语句争议10.Python的命名11.隐藏的彩蛋12.最古老的编程语......
  • Python 中的常量应该大写吗?
    在PEP8中,一般规则是在UPPER_CASE字符中声明常量。在现实生活中,可能有多种情况:#!envpythonDATABASE_HOST='localhost'app=Flask('myapp')base_two=partial(int,base=2)通常我们将字符串类型或数字类型变量视为不可变的,因此是常量,而不是对象或函数。问题是......
  • 多重处理会导致 Python 崩溃,并给出一个错误:调用 fork() 时可能已在另一个线程中进行
    我对Python比较陌生,并试图为我的for循环实现一个多处理模块。我在img_urls中存储了一个图像url数组,我需要下载并应用一些Google视觉。if__name__=='__main__':img_urls=[ALL_MY_Image_URLS]runAll(img_urls)print("---%sseconds---"%(......
  • Python编程时输入操作数错误
    我正在用Python编写下面的代码来模拟控制系统。但是,当我调试代码时,我面临以下问题:matmul:输入操作数1没有足够的维度(有0,gufunc核心,签名为(n?,k),(k,m?)->(n?,m?)需要1)文件“D:\ÁreadeTrabalho\GitHub\TCC\CódigosMarcela\SistemaSISO_tres_estados_new.py”,......
  • Python入门知识点 7--散列类型与字符编码
    1、初识散列类型(无序序列)数据类型分为3种:   前面已经学过了两种类型   1.数值类型:int/float/bool只能存储单个数据      2.序列类型:str/list/tuple,有序的存储多个数据--有序类型,有下标,可以进行索引切片步长操作          3.散列类型......
  • Python入门知识点 6--序列类型的方法
    1、初识序列类型方法序列类型的概念:数据的集合,在序列类型里面可以存放任意的数据也可以对数据进行更方便的操作这个操作就是叫增删改查(crud)(增加(Creat),读取查询(Retrieve),更新(Update),删除(Delete)几个单词的首字母简写)增删改查是操作数据最底层的操作(从本质......