python之网络编程

来源:互联网 发布:淘宝图片像素要求 编辑:程序博客网 时间:2024/06/07 01:20

一、TCP/IP简介

(摘录自百度百科)
1. TCP/IP协议
Transmission Control Protocol/Internet Protocol的简写,中译名为传输控制协议/因特网互联协议,又名网络通讯协议,是Internet最基本的协议、Internet国际互联网络的基础,由网络层的IP协议和传输层的TCP协议组成。TCP/IP 定义了电子设备如何连入因特网,以及数据如何在它们之间传输的标准。协议采用了4层的层级结构,每一层都呼叫它的下一层所提供的协议来完成自己的需求。通俗而言:TCP负责发现传输的问题,一有问题就发出信号,要求重新传输,直到所有数据安全正确地传输到目的地。而IP是给因特网的每一台联网设备规定一个地址。

2.TCP/IP协议不是TCP和IP这两个协议的合称,而是指因特网整个TCP/IP协议族。
从协议分层模型方面来讲,TCP/IP由四个层次组成:网络接口层、网络层、传输层、应用层。
TCP/IP协议并不完全符合OSI的七层参考模型,OSI(Open System Interconnect)是传统的开放式系统互连参考模型,是一种通信协议的7层抽象的参考模型,其中每一层执行某一特定任务。该模型的目的是使各种硬件在相同的层次上相互通信。这7层是:物理层、数据链路层(网络接口层)、网络层(网络层)、传输层(传输层)、会话层、表示层和应用层(应用层)。而TCP/IP通讯协议采用了4层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。由于ARPANET的设计者注重的是网络互联,允许通信子网(网络接口层)采用已有的或是将来有的各种协议,所以这个层次中没有提供专门的协议。实际上,TCP/IP协议可以通过网络接口层连接到任何网络上,例如X.25交换网或IEEE802局域网。

注意tcp本身不具有数据传输中噪音导致的错误检测功能,但是有实现超时的错误重传功能;

二、TCP编程

#SocketTcpServer.py import socketimport threadingimport time# 创建一个sockets = socket.socket(socket.AF_INET, socket.SOCK_STREAM)s.bind(('127.0.0.1', 9999))s.listen(5)print('TCPServer is waiting for connection...')def tcplink(sock, addr):    print('Accept new connection from %s:%s...' % addr)    sock.send(b'Welcome!')    while True:        data = sock.recv(1024)        time.sleep(1)        if not data or data.decode('utf-8') == 'exit':            break        sock.send(('Hello, %s!' % data.decode('utf-8')).encode('utf-8'))    sock.close()    print('Connection from %s:%s closed.' % addr)while True:    # 接受一个新连接:    sock, addr = s.accept()    # 创建新线程来处理TCP连接:    t = threading.Thread(target=tcplink, args=(sock, addr))    t.start()
#SocketTcpClient.pyimport sockets = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 建立连接:s.connect(('127.0.0.1', 9999))# 接收欢迎消息:print(s.recv(1024).decode('utf-8'))for data in [b'Jaber', b'Katy', b'Betty', b'huangxin']:    # 发送数据:    s.send(data)    print(s.recv(1024).decode('utf-8'))s.send(b'exit')s.close()
#server(未连接时的状态)"C:\Program Files\Python36\python.exe" C:/Users/Administrator/PycharmProjects/HomeWorkByNetwork/SocketTcpServer.pyTCPServer is waiting for connection...#server(连接成功后的状态)"C:\Program Files\Python36\python.exe" C:/Users/Administrator/PycharmProjects/HomeWorkByNetwork/SocketTcpServer.pyTCPServer is waiting for connection...Accept new connection from 127.0.0.1:55380...Connection from 127.0.0.1:55380 closed.#client"C:\Program Files\Python36\python.exe" C:/Users/Administrator/PycharmProjects/HomeWorkByNetwork/SocketTcpClient.pyWelcome!Hello, Jaber!Hello, Katy!Hello, Betty!Hello, huangxin!Process finished with exit code 0

三、UDP编程

#SocketUcpServer.pyimport sockets = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)# 绑定端口:s.bind(('127.0.0.1', 8888))print('Bind UDP on 8888...')while True:    # 接收数据:    data, addr = s.recvfrom(1024)    print('Received from %s:%s.' % addr)    s.sendto(b'Hello, %s!' % data, addr)
#SocketUcpClient.pyimport sockets = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)for data in [b'Michael', b'Tracy', b'Sarah']:    # 发送数据:    s.sendto(data, ('127.0.0.1', 8888))    # 接收数据:    print(s.recv(1024).decode('utf-8'))s.close()
#server(未连接时的状态)"C:\Program Files\Python36\python.exe" C:/Users/Administrator/PycharmProjects/HomeWorkByNetwork/SocketUdpServer.pyBind UDP on 8888...#server(连接成功后的状态)"C:\Program Files\Python36\python.exe" C:/Users/Administrator/PycharmProjects/HomeWorkByNetwork/SocketUdpServer.pyBind UDP on 8888...Received from 127.0.0.1:52492.Received from 127.0.0.1:52492.Received from 127.0.0.1:52492.#client"C:\Program Files\Python36\python.exe" C:/Users/Administrator/PycharmProjects/HomeWorkByNetwork/SocketUdpClient.pyHello, Michael!Hello, Tracy!Hello, Sarah!Process finished with exit code 0
原创粉丝点击