python安全工具开发应用03网络编程

01 C/S架构

client

server

创建通信端点,让server能够监听请求

02套接字

一种具有通信端点 创建套接字必须创建健在通讯之前

python支持:AF_UNIX,AF_NETLINK,AF_INET(基于网络的套接字)

03网络编程

socket模块

socket模块socket()  函数用力啊创建套接字

使用socket.socket()函数穿件套接字方法如下:

socket(socket family,socket_type,prtocol=0)

#socket_family 就是指套接字家族可以是AF_VNIX或AF_INET

#socket_type 就是指套接字类型,即SOCK_STREAM或SOCK_DGRAM

#protocol 是协议,默认为0,一般不填


创建 一个TCP/IP套接字,方法如下:

tcpsock = socket(socket.AF INET,socket.SOCK_STREAM)

import socket
#创建tcp/ip套接字
tcp =socket.socket(AF_INET,SOCK_STREAM)
#创建udp/ip套接字
ucp =socket.socket(SF_INET,SOCK_DGRAM)

套接字对象方法:

  • 套接字的常用函数

函数名描述
服务器套接字 
bind((hostname, port))绑定地址(注意这里是元祖)到套接字
listen()开启TCP监听
accept()被动接受客户端的连接(阻塞)
客户端套接字 
connect((hostname, port))初始化TCP服务器连接
connect_ex()connect()的扩展版本,出错时返回错误码,而不是异常
公用的套接字 
recv()接收TCP的数据
send()发送TCP数据
sendall()发送完整的TCP数据
recvfrom()接收UDP数据
sendto()发生UDP数据,因为没有连接,所以这里要指定发送的目标
getpeername()连接到当前套接字的远程地址
getsockname()当前socket地址
getsockopt()获得套接字的参数
setsockopt()设置套接字的参数
close()关闭套接字
面向模块的套接字函数 
setblocking()设置套接字是否是阻塞模式
settimeout()设置阻塞套接字操作的超时时间
gettimeout()得到阻塞套接字操作的超时时间
面向文件的套接字函数 
fileno()套接字的文件描述符
makefile()创建一个与套接字关联的文件对象

等会再写

创建网络编程实例

创建一个TCP服务器和客户端

创建TCP服务器的基本步骤

  1. 创建套接字并绑定地址
  2. 开始监听连接
  3. 接收链接并发送数据
  4. 关闭套接字

import socket

HOST = ''  #空字符表示127.0.0.1
PORT = 3214

sk = socket.socket()  #默认使用IPV4和TCP
sk.bind((HOST,PORT))
sk.listen(5)

cli,addr = sk.accept()  #等待链接(阻塞式),在连接到来之前会阻塞在这里

print("Client Addr:",addr)

while True:
    data =cli.recv(1024)
    if not data:
        break
    print("Recieve Data:",data.decode('utf-8'))
    cli.send(data)

cli.close()

创建TCP客户端的基本步骤

  1. 创建套接字,连接服务器
  2. 收发数据
  3. 关闭套接字
  4. 这里的客户端仅仅可以用来发送消息给服务端,而服务端会接收消息然后重新发送回客户端
import socket

HOST ='127.0.0.1'
PORT =3214

sk =socket.socket()

try:
    sk.connect((HOST,PORT))
    data = "hello"
    while data :
        sk.sendall(b'data')
        data =sk.recv(1024)
        print ("Recv data:",data)
        data =raw_input('Please input message \n')
except socket.error as err:
    print(err)
finally:
    sk.close()

创建UDP服务器和客户端

创建UDP服务端的基本步骤

  1. 创建套接字并绑定地址
  2. 开始监听连接
  3. 收发数据
  4. 关闭套接字
import socket

HOST=''
PORT =3214

sk= socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
sk.bind((HOST,PORT))

data=True

while data:
    data ,addr =sk.recvfrom(1024)
    if data == b'byte':
        break
    print("Recieve Data:",data.decode('utf-8'))
    sk.sendto(data,addr)

sk.close()

创建UDP客户端的基本步骤

  1. 创建套接字
  2. 收发数据
  3. 关闭套接字
import socket

HOST='127.0.0.1'
PORT =3214

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

data='hello'

while data:
    sk.sendto(b'data',(HOST,PORT))
    if data == "bye":
        break
    data,addr =sk.recvfrom(1024)
    print("Recv Data:",data)
    data =input('Please message:\n')

sk.close()

# tcpclient与udpclient区别

# 建立socket时的区别

# tcp需要链接服务端

# 收发数据方法不同

这里与TCP的区别就是不用建立连接,客户端只是收发消息,并不会与服务器建立连接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值