Python Socket编程

本文介绍了Socket的基本概念及其在Python中的使用方法。包括如何创建Socket、发送和接收数据,并通过实例展示了UDP聊天室和echo服务器的实现。

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

Socket简介

Sccket的英文原意是“孔”或者“插座”。作为BSD UNIX的进程通信机制,取最后一种意思,通常也称“套接字”,用于描述IP地址和端口,是一个通讯链的句柄,可以用来实现不同虚拟机或者不同计算机的通信。

Sccket本事是编程接口(API)对于TCP/IP的封装,TCP/IP也要提供程序员做网络开发所用的接口,这就是Socket编程接口;HTTP是轿车,提供了封装或者显示数据的具体形式,Socket是发动机,提供了网络通信的能力。

套接字之间连接过程可分为三个步骤:服务器监听,客户端请求,连接确认。

创建Socket

import socket
socket.socket(AddressFamliy,Type)

该函数创建一个socket,返回该socket的描述符。

AddressFamily:可选择AF_INET(用于Internet进程间通信)或者AF_UNIX(用于同一台机器进程间通信),实际工作中多用AF_INET。

Type:套接字类型,可是SOCK_STREAM(流式套接字,主要用于TCP协议)或者SOCK_DGRRAM(数据套接字,主要用于UDP协议)。

  • UDP(User Data Protocol,用户数据报协议)是一个无连接的简单数据报的传输层协议,不提供可靠性,没有超市重发等机制,故传输速度快,一般用于多点通信和实时数据业务,比如SNMP,RIP,DNS。
  • TCP(Transmission Control Protocol,传输控制协议)是面向连接的协议,在发送数据前,必须和对方建立可靠的连接,一个TCP连接必须经过三次“对话”才能建立起来。

简单的UDP发送接收信息

  1 #encoding=utf-8
  2 from socket import *
  3 #创建套接字
  4 udpSocket = socket(AF_INET,SOCK_DGRAM)
  5 #准备数据接收方地址
  6 sendAddr = ("192.168.9.1",8080)
  7 #从键盘获取数据
  8 sendData = input("请输入要发送的内容:")
  9 sendData = bytes(sendData,encoding="utf-8")
 10 #发送数据到指定电脑
 11 udpSocket.sendto(sendData,sendAddr)
 12 #等待接收方发送的信息
 13 receData = udpSocket.recvfrom(1024)#1024表示接收的最大字节数
 14 print (receData)
 15 #关闭套接字
 16 udpSocket.close()

绑定地址和端口 

  1 #encoding=utf-8
  2 from socket import *
  3 #创建套接字
  4 udpSocket = socket(AF_INET,SOCK_DGRAM)
  5 #绑定本地相关信息,如果网络程序不绑定,系统会随机分配
  6 #IP一般不写,表示本机任何一个IP
  7 bindAddr = ("",7788)
  8 udpSocket.bind(bindAddr)
  9 #准备数据接收方地址
 10 receData = udpSocket.recvfrom(1024)#1024表示接收的最大字节数
 11 print (receData)
 12 #关闭套接字
 13 udpSocket.close()

echo服务器

#encoding=utf-8
from socket import *
#创建套接字
udpSocket = socket(AF_INET,SOCK_DGRAM)
#绑定本地相关信息,如果网络程序不绑定,系统会随机分配
#IP一般不写,表示本机任何一个IP
bindAddr = ("",9999)
udpSocket.bind(bindAddr)
num = 1
while True:
#等待接收方发送的信息
    receData = udpSocket.recvfrom(1024)#1024表示接收的最大字节数
    udpSocket.sendto(receData[0],receData[1])
    print ("第%s条信息,信息为:%s"%(num,receData[0]))
    num +=1
#关闭套接字
udpSocket.close()

UDP聊天室

#encoding=utf-8
from socket import *
import time
#创建套接字
udpSocket = socket(AF_INET,SOCK_DGRAM)
#绑定本地相关信息,如果网络程序不绑定,系统会随机分配
#IP一般不写,表示本机任何一个IP
bindAddr = ("",10000)
udpSocket.bind(bindAddr)
while True:
#等待接收方发送的信息
    receData = udpSocket.recvfrom(1024)#1024表示接收的最大字节数
    print ("%s:%s"%(time.ctime(),receData[0]))
#关闭套接字
udpSocket.close()

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值