网络udp之什么是socket?

本文介绍了网络中进程间通信的方式,重点讲解了什么是socket以及如何在Python中创建TCP和UDP套接字。通过socket,不同主机的进程可以进行通信,广泛应用于网页浏览、聊天和邮件服务等。示例代码展示了如何创建和使用UDP套接字进行数据发送与接收。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

socket简介

1、不同电脑上的进程之间如何通信

⾸要解决的问题是如何唯⼀标识⼀个进程,否则通信⽆从谈起!
在1台电脑上可以通过进程号(PID)来唯⼀标识⼀个进程,但是在⽹络中这是⾏不通的。
其实TCP/IP协议族已经帮我们解决了这个问题,⽹络层的“ip地址”可以唯⼀标识⽹络中的
主机,⽽传输层的“协议+端⼝”可以唯⼀标识主机中的应⽤进程(进程)。
这样利⽤ip地址,协议,端⼝就可以标识⽹络的进程了,⽹络中的进程通信就可以利⽤这
个标志与其它进程进⾏交互
注意
所谓 进程 指的是:运⾏的程序以及运⾏时⽤到的资源这个整体称之为进程(在
讲解多任务编程时进⾏详细讲解)
所谓 进程间通信 指的是:运⾏的程序之间的数据共享
后⾯课程中会详细说到,像⽹络层等知识,不要着急

2、 什么是socket

socket(简称 套接字 ) 是进程间通信的⼀种⽅式,它与其他进程间通信的⼀个主要不同
是:
它能实现不同主机间的进程间通信,我们⽹络上各种各样的服务⼤多都是基于 Socket 来
完成通信的
例如我们每天浏览⽹⻚、QQ 聊天、收发 email 等等

3、创建socket

在 Python 中 使⽤socket 模块的函数 socket 就可以完成:
import socket
socket.socket(AddressFamily, Type)
说明:
socket.socket(socket.AF_INET, socket.SOCK_STREAM) 固定的不能改变
函数 socket.socket 创建⼀个 socket,该函数带有两个参数:
Address Family:可以选择 AF_INET(⽤于 Internet 进程间通信) 或者
AF_UNIX(⽤于同⼀台机器进程间通信),实际⼯作中常⽤AF_INET
Type:套接字类型,可以是 SOCK_STREAM(流式套接字,主要⽤于 TCP 协议)
或者 SOCK_DGRAM(数据报套接字,主要⽤于 UDP 协议)
创建⼀个tcp socket(tcp套接字)
import socket

创建tcp的套接字
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# ...这⾥是使⽤套接字的功能(省略)...
# 不⽤的时候,关闭套接字
s.close()
创建⼀个udp socket(udp套接字)
import socket
# 创建udp的套接字
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# ...这⾥是使⽤套接字的功能(省略)...
# 不⽤的时候,关闭套接字
s.close()

说明
套接字使⽤流程 与 ⽂件的使⽤流程很类似

  1. 创建套接字
  2. 使⽤套接字收/发数据
  3. 关闭套接字

udp⽹络程序-发送、接收数据

  1. udp⽹络程序-发送数据
    创建⼀个基于udp的⽹络程序流程很简单,具体步骤如下:
  2. 创建客户端套接字
  3. 发送/接收数据
  4. 关闭套接字
    在这里插入图片描述
    代码如下:
#coding=utf-8
from socket import *

# 1. 创建udp套接字
udp_socket = socket(AF_INET, SOCK_DGRAM)
# 2. 准备接收⽅的地址
# '192.168.1.103'表示⽬的ip地址
# 8080表示⽬的端⼝
dest_addr = ('192.168.1.103', 8080) # 注意 是元组,ip是字符串,端⼝是数字
# 3. 从键盘获取数据
send_data = input("请输⼊要发送的数据:")
# 4. 发送数据到指定的电脑上的指定程序中
udp_socket.sendto(send_data.encode('utf-8'), dest_addr)
# 5. 关闭套接字
udp_socket.close()

运⾏现象:
在Ubuntu中运⾏脚本:
在这里插入图片描述
Encode()和decode()函数的用法?
Str.Encode(‘utf-8’),把字符串编码成字节码,utf-8代表的是国际码,gbk代表的是汉字码
Bytes.decode(‘utf-8’),把字节码解码成字符串。
Listen(backlog)数值代表的含义?
监听变主动为被动,backlog指定最多允许多少个客户连接到服务器。它的值至少为1。收到连接请求后,这些请求需要排队,如果队列满,就拒绝请求。请注意,最大限制是取决于操作系统,Ubuntu上默认是128

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值