本文目录:
一、socket
socket是什么?
学习网络编程 其实就是在学socket 翻译过来称为套接字,是对底层的 TCP IP UDP 等网络协议进行封装,使得上层的应用程序开发者,不用直接接触这对复杂,丑陋的协议,在程序员的言论,他就是一个封装好的模块!
要完成网络通讯,只需要使用系统提供的socket模块就行,TCP和UDP是传输层最常见的协议
TCP和UDP的优缺点
主要控制传输数据的方式 TCP的传输方式 优点:通过三次握手来与服务器建立连接 可以保证数据的完整性 a机器给b机器发送数据包 要求b机器必须立即返回一个确认包 a机器会等待一段时间,如果超时还没有收到确认,则重发数据 缺点:传输效率低 使用场景: 文字聊天,支付宝转账等, UDP 传输方式:不需要建立连接,直接发送 缺点: 不能保证数据的完整性 优点:传输效率比TCP高 使用场景:视频通话,语音通话,UDP
""" python中的socket 在使用socket的时候用户需要关心的是 ip地址,port端口, 传输协议TCP/UDP,你要发送的数据data 在写网络编程的时候,必然是有两台代码,对应着客户端和服务器 使用socket来完成TCP通讯 应该先完成服务器的代码编写 """
二、TCP服务器
import socket # 1.创建一个代表服务器的socket对象 s = socket.socket() # 2.绑定端口号和IP地址 # 127.0.0.1 表示当前这个电脑的ip address = ("127.0.0.1",8080) s.bind(address) print("服务器已启动!") # 3.开始监听这个端口 # 5表示 可以有5个处于半连接状态的连接 指的不是最大连接数 s.listen(5) print("test") # 4.接受连接请求 # 该函数是阻塞的 会卡主程序的执行,必须等到有一个客户端进来才会继续执行 # 返回元组 第一个是代表客户端的socket对象 第二客户端的地址信息 client,c_address = s.accept() print("有一个连接已建立!") print(c_address) # 给客户端发送数据 # 5.读写数据 # 接受数据 res = client.recv(1024) print(res) # 6.关闭连接 # s.close()
三、TCP客户端
import socket # 1.创建客户端的socket对象 c = socket.socket() # 2.指定服务器的ip和port server_address = ("127.0.0.1",8080) # 3.建立连接 c.connect(server_address) # 4.读写数据 # 发送数据到服务器 c.send("hello 我是客户端!".encode("utf-8")) # 5.关闭连接 c.close()
四、UDP服务器
import socket # 1.创建socket对象 s = socket.socket(type=socket.SOCK_DGRAM) # 2.绑定端口和ip s.bind(("127.0.0.1",10000)) while True: # 3.接受数据 res = s.recv(1024) print(res) while True: msg = input(">>>:") # 需要获取对方的ip和端口 #s.sendto(msg.encode("utf-8"), ("127.0.0.1", 10000)) # 关闭资源 s.close()
五、UDP客户端
import socket # 1.创建socket对象 s = socket.socket(type=socket.SOCK_DGRAM) # 2.绑定端口和ip s.bind(("127.0.0.1",10000)) while True: # 3.接受数据 res = s.recv(1024) print(res) while True: msg = input(">>>:") # 需要获取对方的ip和端口 #s.sendto(msg.encode("utf-8"), ("127.0.0.1", 10000)) # 关闭资源 s.close()
六、聊天服务器
import socket # 1.创建socket对象 s = socket.socket(type=socket.SOCK_DGRAM) # 2.绑定端口和ip s.bind(("127.0.0.1",10000)) while True: # 3.接受数据 res = s.recv(1024) print(res) while True: msg = input(">>>:") # 需要获取对方的ip和端口 #s.sendto(msg.encode("utf-8"), ("127.0.0.1", 10000)) # 关闭资源 s.close()
七、聊天客户端
import socket client = socket.socket() client.connect(("127.0.0.1",65535)) while True: # 发送 client.send(input(">>>:").encode("utf-8")) # 接收 data = client.recv(1024).decode("utf-8") print(data) if len(data) == 0: client.close() break