Python学习 —— 网络编程(TCP/UDP)

基本概念

  • IP地址:负责在网络上唯一定位的基础
    -192.168.xxxx.xxxx:局域网ip
    -127.0.0.1:本机地址

  • 端口
    -范围:0-655535
    -知名端口:0-1023
    使用端口时,切记不要占用系统占用的端口

  • UDP:非安全的不面向链接的传输
    - 大小限制64kb
    - 没有顺序
    - 速度快

  • TCP:基于链接的通信

  • Socket编程:
    -socket(套接字):是一个网路通信的端点,实现不同主机之间的通信
    -分TCP/UDP两种不同的模式

UDP编程

  • Server:服务器端
    1、建立socket,socket是负责具体通信的一个实例
    2、绑定,为创建的socket指派固定端口和ip地址
    3、接受内容,根据业务逻辑发送反馈信息(非必须)
  • Client:客户端
    1、建立socket通信
    2、发送内容,并接收反馈
    服务端实例:
import socket

def ServerFunc():
    #socket.AF_INET : 使用IPV4
    #socket.SOCK_DGRAM: 使用UDP链接
    sock=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
    #绑定ip和port
    #127.0.0.1:本机地址
    #7800 :端口号
    #地址是tuple类型(ip,port)
    address=("127.0.0.1",7800)
    sock.bind(address)
    #接受对方消息
    #recvfrom接收的是一个tuple元组,前一项表示数据,后一项表示地址
    data,address=sock.recvfrom(500)
    #数据默认是bytes,必须解码后才可以得到str
    text=data.decode()
    print("Server receve data: {0}".format(text))
    rsp="I know"
    data=rsp.encode()
    sock.sendto(data,address)
if __name__ == '__main__':
    print("Start serve............")
    ServerFunc()
    print("End serve................")
  输出结果:
Start serve............
Server receve data: I am learing socket
End serve................

客户端实例:

import socket

def clientFunc():
    sock=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
    text="I am learing socket"
    data=text.encode()
    sock.sendto(data,("127.0.0.1",7800))
    data,address=sock.recvfrom(500)
    data=data.decode()
    print(data)
if __name__ == '__main__':
    clientFunc()
   输出结果:
   I know
  • TCP编程:面向链接的传输,每次传输之前都需要建立链接
    和UDP编程相比,采用TCP编程时需要监听socket建立连接通路

服务器端需要用listen来监听
客户端需要connect建立连接

import socket
def TcpFunc():
    #socket.AF_INET : 使用IPV4
    #socket.SOCK_STREAM: 使用Tcp链接
    sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    #绑定ip和port
    #127.0.0.1:本机地址
    #7800 :端口号
    #地址是tuple类型(ip,port)
    address=("127.0.0.1",7800)
    sock.bind(address)		
    sock.listen()
    while True:
        skt,address=sock.accept()
        msg=skt.recv(500)
        msg=msg.decode()
        rst="Received msg:{0} from {1}".format(msg,address)
        print(rst)
        skt.send(rst.encode())
        skt.close()

if __name__ == '__main__':
    TcpFunc()
import socket
def clientFunc():
    address = ("127.0.0.1", 7800)
    sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    sock.connect(address)
    text="TCP Learing"
    data=text.encode()
    sock.send(data)
    rst=sock.recv(500)
    print(rst.decode())
    sock.close()
if __name__ == '__main__':
    clientFunc()

你可能感兴趣的:(Python)