"""
学习网络编程 其实就是在学习socket
socket是什么?
翻译过来称为套接字
是对底层的 TCP IP UDP 等网络协议进行封装
使得上层的言论,他就是一个封装好的模块!
要完成网络通讯,只需要使用系统提供的socket模块就行
TCP和UDP是传输层最常见的协议
主要控制传输数据的方式
TCP的传输的方式
优点:通过三次握手来与服务器建立连接
可以保证数据的完整性
a机器给b机器发送数据包 要求b机器必须立即返回一个确认包
a机器会等待一段时间,如果超时还没有收到确认,否则重发数据
缺点:传输频率低
使用场景:文子聊天,支付宝转账等
UDP
传输方式:不需要建立连接,自己发送
缺点:不能保证数据的完整性
优点:传输效率比TCP高
使用场景:视频通话,语音通话,UOP
Python中的socket
在使用socket的时候用户需要关心的是ip地址,por端口,传输协议TCP/UDP,你要发送的数据data
在写网络编程的时候,必然是要两台代码,对应着客户端和服务器
使用socket来完成TCP通讯
应该先完成服务器的代码编写
"""
3.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()
4.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()
5.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("utm-8"),("127.0.0.1",10000))
关闭资源
s.close()
6.UDP客户端
import socket
1.创建socket(type=socket.SOCK_DGRAM)
while True:
msg=input(">>>:")
c.sendto(msg.encode("utf-8"),(127.0.0.1",10000))
c.close()
7.聊天的客户端
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)
client.close()
break
7.聊天服务器
"""
正常的聊天的程序 客户端发送的数据 先发送到服务器端 服务器端把信息发给你的目标好友
"""
import socket
server=socket.socket()
server.bind(("127.0.0.1",65535))
server.listen(5)
clint,c_address=server.accept()
while True:
data = client.recv(1024).decode("utp-8")
print("收到来自客户端的数据:",data)
如果对方发来一个over我就关闭连接
if data == "over":
client.close()
break
把对方传过来的数据转换为大写 在发回去!
client,send(data.upper().encode("utf-8"))
关闭服务端
server.close()
需求 客户端输入cmd命令 发送给服务器执行 服务器执行(subprocess)完后返回 执行结果