网络编程
Posted pythoncui
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网络编程相关的知识,希望对你有一定的参考价值。
软件开发的架构:
1. C/S架构:客户端与服务器端的架构
2. B/S架构:浏览器端与服务器端架构
网络基础
地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议
socket概念
Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。
其实站在你的角度上看,socket就是一个模块。我们通过调用模块中已经实现的方法建立两个进程之间的连接和通信。 也有人将socket说成ip+port,因为ip是用来标识互联网中的一台主机的位置,而port是用来标识这台机器上的一个应用程序。 所以我们只要确立了ip和port就能找到一个应用程序,并且使用socket模块来与之通信。
套接字(socket)的初使用
基于TCP协议的socket
tcp是基于链接的,必须先启动服务器,然后再启动客户端去链接服务器
server端:
1 import socket 2 sk = socket.socket() 3 sk.bind((‘127.0.0.1‘,8898)) #把地址绑定到套接字 4 sk.listen() #监听链接 5 conn,addr = sk.accept() #接受客户端链接 6 ret = conn.recv(1024) #接收客户端信息 7 print(ret) #打印客户端信息 8 conn.send(b‘hi‘) #向客户端发送信息 9 conn.close() #关闭客户端套接字 10 sk.close() #关闭服务器套接字
client端:
import socket sk = socket.socket() # 创建客户套接字 sk.connect((‘127.0.0.1‘,8898)) # 尝试连接服务器 sk.send(b‘hello!‘) ret = sk.recv(1024) # 对话(发送/接收) print(ret) sk.close() # 关闭客户套接字
基于UDP协议的socket
udp是无连接的,启动服务器之后可以直接接收消息,不需要提前建立连接
server端:
import socket sk = socket.socket(type=socket.SOCK_DGRAM) sk.bind((‘127.0.0.1‘, 8021)) while True: msg, addr = sk.recvfrom(1024) ret = msg.decode(‘utf-8‘) print(ret) info = input(‘>>>‘) sk.sendto(bytes(info.encode(‘utf-8‘)), addr) sk.close()
client1端:
import socket sk = socket.socket(type=socket.SOCK_DGRAM) ip_port = ((‘127.0.0.1‘, 8021)) while True: info = input(‘client1: ‘) sk.sendto(bytes(info.encode(‘utf-8‘)), ip_port) ret, addr = sk.recvfrom(1024) print(ret.decode(‘utf-8‘)) sk.close()
client2端:
import socket sk = socket.socket(type=socket.SOCK_DGRAM) ip_port = ((‘127.0.0.1‘), 8021) while True: info = input(‘client2: ‘) info = ‘