1. 网络编程概念
实现不同电脑中的软件(应用程序)之间的数据传递,即进程间的通信
2. 网络通信必备的两点
(1)IP:确定互联网中的哪一台电脑
(2)Port:确定主机中的哪个应用程序
有还有一个就是协议:IP地址+协议+端口=同源
3. 局域网使用的私有IP,A类、B类、C类三种
?4.? udp聊天器
import socket
def main():
"""实现收发数据的udp聊天器"""
udp_socket = socket.socket(family=socket.AF_INET, type=socket.SOCK_DGRAM)
addr = ("127.0.0.1", 7788)
udp_socket.bind(addr)
while True:
send_data = input("请输入要发送的数据")
udp_socket.sendto(send_data.encode(), ("127.0.0.1", 8080))
recv_data = udp_socket.recvfrom(1024)
print(recv_data[0].decode(), recv_data[1])
udp_socket.close()
if __name__ == '__main__':
main()
5.? TCP协议
tcp协议是面向连接的、可靠的、基于字节流的传输层控制协议。
可靠传输包含四个方面:
?6. udp和tcp通信模型
(1)udp
?(2)tcp
7. tcp客户端
import socket
def main():
tcp_client_socket = socket.socket(family=socket.AF_INET, type=socket.SOCK_STREAM)
tcp_client_socket.connect(("127.0.0.1", 8000))
send_data = input("请输入要发送的数据:")
tcp_client_socket.send(send_data.encode())
recv_data = tcp_client_socket.recv(1024)
print(recv_data.decode())
tcp_client_socket.close()
if __name__ == '__main__':
main()
8. tcp服务器
import socket
def main():
"""循环为多个客户端服务,并且多次服务同一个客户端"""
tcp_server_socket = socket.socket(family=socket.AF_INET, type=socket.SOCK_STREAM)
tcp_server_socket.bind(("127.0.0.1", 8000))
# 使用socket创建的套接字默认是主动的,使用listen将其变为被动的,这样就可以接受别人的链接了
tcp_server_socket.listen(128)
while True:
# 等待客户端链接,并返回服务客户端的套接字和客户端的地址
client_socket, client_addr = tcp_server_socket.accept()
while True:
# 服务新到来的客户
recv_data = client_socket.recv(1024)
recv_data = recv_data.decode()
# recv解堵塞有两种情况,一种客户端发送过来数据,第二种客户端调用了close
# 客户端是发送不了空数据的,只要数据为空,一定是客户端调用了close
if recv_data:
print("服务器接收到的数据是:{}".format(recv_data))
client_socket.send("服务器的响应".encode())
else:
break
client_socket.close()
print("当前客户服务已完毕")
tcp_server_socket.close()
if __name__ == '__main__':
main()
|