socket

import socket
from socket import SOL_SOCKET, SO_REUSEADDR

import json
# 1.路由器,交换机的作用?
# 答 .路由器:  隔离广播域 ,连接内网和外网的中间设备, 生成路由表
#     交换机: 工作在链路层, 收发数据帧


# 2.用户登录作业用tcp协议下的socket写:
#   1.# 服务端
#       - 等待客户端来发送数据:用户名、密码
#       - 本地文件中查看用户名密码是否合法。
#       - 合法:登录成功
#       - 否则:用户名或密码错误
# server = socket.socket()
# s_ip_port = ("192.168.15.102", 20800)
# server.bind(s_ip_port)
# server.listen()
# conn, addr = server.accept()
# conn.send("请输入注册账号: ".encode("utf-8"))
# username = conn.recv(1024).decode("utf-8")
# print(username)
# conn.send("请输入注册密码".encode("utf-8"))
# pwd = conn.recv(1024).decode("utf-8")
# with open("user_pwd", mode="a", encoding="utf-8") as f:
#     dic = {username: pwd}
#     print(dic)
#     json.dump(dic, f)
#     f.write("\n")
# i = 2
# while i >= 0:
#     conn.send("请输入登录用户名".encode("utf-8"))
#     u_name = conn.recv(1024).decode("utf-8")
#     conn.send("请输入登录密码".encode("utf-8"))
#     pwd_l = conn.recv(1024).decode("utf-8")
#     with open("user_pwd", mode="r", encoding="utf-8") as ff:
#         for line in ff:
#             line = line.strip()
#             dic = json.loads(line)
#             if dic.get(u_name) == pwd_l:
#                 conn.send("登录成功".encode("utf-8"))
#                 i = -1
#                 break
#         else:
#             info = "用户名或密码错误,剩余 %s 次机会" % i
#             conn.send(info.encode("utf-8"))
#             i -= 1
# #   .
# #       客户端
# #       - 用户输入:用户名、密码
# #       - 发送到服务端进行校验。
# user = socket.socket()
# s_ip_port = ("192.168.15.102", 20800)
# user.connect(s_ip_port)
# msg_server = user.recv(1024).decode("utf-8")
# print(msg_server)
# name = input("注册用户名:")
# user.send(name.encode("utf-8"))
# msg_server = user.recv(1024).decode("utf-8")
# print(msg_server)
# pwd = input("请输入注册密码:")
# user.send(pwd.encode("utf-8"))
# while 1:
#     msg_server = user.recv(1024).decode("utf-8")
#     print(msg_server)
#     name_l = input("登录用户名:")
#     user.send(name_l.encode("utf-8"))
#     msg_server = user.recv(1024).decode("utf-8")
#     print(msg_server)
#     pwd_l = input("登录密码:")
#     user.send(pwd_l.encode("utf-8"))
#     msg_server = user.recv(1024).decode("utf-8")
#     print(msg_server)
#     if msg_server == "登录成功":
#         break

# 3.udp协议下的socket聊天工具(类10086)

#   1.服务端
#       - 接收客户端发送的信息并作出回复。
#       - 检查是否有某些指定关键字并回复消息,如果发送过来的消息中还有sb字符串,那么将sb替换成alexsb,然后和你要输入的内容组合起来发送给客户端。
# udp_server = socket.socket(type=socket.SOCK_DGRAM)
# server_ip_port = ("192.168.15.102", 29999)
# # udp_server.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
# udp_server.bind(server_ip_port)
# while 1:
#     c_msg, c_addr = udp_server.recvfrom(1024)
#     c_info = c_msg.decode("utf-8")
#     print(c_info)
#     say = input("回复该用户: ")
#     c_info1 = say
#     if "sb" in c_info:
#         c_info1 = c_info.replace("sb", "alexsb") + say
#     udp_server.sendto(c_info1.encode("utf-8"), c_addr)
#     # udp_server.close()
# #
# #  2.多个客户端
# #       - 客户端向服务端发送信息
# client = socket.socket(type=socket.SOCK_DGRAM)
# server_ip_port = ("192.168.15.102", 29999)
# while 1:
#     info = input("请输入需要发送给对方的消息: ")
#     client.sendto(info.encode("utf-8"), server_ip_port)
#     msg = client.recv(1024)
#     print(msg.decode("utf-8"))
#     # client.close()

# 4.简述OSI七层协议。
#  答:物理层: 承载电气信号的介质, 如网线,网卡等物体,传输比特流
#     数据链路层:   转发数据帧的设备, 将电气信号封装成帧,或者将帧转换为电气信号,识别MAC
#     网络层:  数据帧转换为ip数据包,或者ip数据包转换为帧,  控制不同子网直接的路由转发
#     传输层: 区分应用程序,传输方式 将不同的应用程序的数据加加上端口封装
#     会话层: 利用传输层的服务, 建立两个客户端的会话
#     表示层: 将计算机识别的语言转换为应用层的语言
#     应用层: 作用于应用程序之间的数据交换, 人类可以识别
# 5.名词:mac地址、ip地址、DHCP服务、路由器、交换机、子网掩码、网关、DNS、广播,BS和CS架构
#  mac地址: 网卡的唯一标识,身份认证
#  ip地址: 网络互连协议地址, ipv4: x.x.x.x or ipv6
#  dhcp服务: 自动分发ip地址服务
#  路由器: 内/外网介入的中间设备, 隔离广播域,
#  子网掩码:  用于计算子网 网络号, 区分不同网络
#  6.简述三次握手、四次挥手的流程
# 答:三次握手 1, 客户端连接服务,并发送syn(同步序列号),
#             2.服务器接收c_syn, 并将ack1 = c_syn +1返回给客户端, 再发送自己的s_syn给客户端
#             3, 客户端接收服务器的ack2 = s_syn+1 和 服务发来的s_syn并给客户, 再次将s-syn + 1返回给服务,此时建立连接
#    四次挥手: (1) TCP客户端发送一个FIN,用来关闭客户到服务器的数据传送。
#              (2) 服务器收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。和SYN一样,一个FIN将占用一个序号。
#               (3) 服务器关闭客户端的连接,发送一个FIN给客户端。
#               (4) 客户端发回ACK报文确认,并将确认序号设置为收到序号加1。

# 7.什么是socket?简述基于tcp协议的套接字通信流程。
#  答:  再应用层和传输层之间的抽象层,套接字, 模块封装好的一个模块, 用户拿它可以在计算机和计算机之间通信,
#        tcp协议的套接字通信流程
#        服务器:  创建通信对象socket.socket(), 绑定ip和端口obj.bind(ip+port), 启用端口监听服务obj.listen, 创建等等客户端连接服务器:obj.accept()
#                  接收或者发货消息 -连接的另一端
#        客户端: 创建通信对象socket.socket(), 连接服务端,client.connect(server_ip_port) ,发送或者接收消息- 另一端
# 8.简述TCP和UDP协议的区别
#  1 tcp是面向连接的,udp是无连接的,
#  2 tcp的传输可靠,开销大,效率低, udp的传输不可靠,尽力传输, 效率高
#  3,tcp是面向流的传输, 一个消息可能分几个包, 一次接受可以是多个包, 无消息保护边界, udp是面向包的,每个包视作一个消息,每次接受只接受一个, 有保护边界,



# udp_s = socket.socket(type=2)
# s_ipport = ("192.168.15.102", 20800)
# udp_s.bind(s_ipport)
# c, a = udp_s.recvfrom(1024)
# print(a)
# print(c.decode("utf-8"))
# udp_s.sendto(b"yes,i am!", a)

# A = socket.socket(type=socket.SOCK_DGRAM)
# server_ip_port = ("192.168.15.102", 20800)
# A_ip_port = ("192.168.15.102", 20802)
# A.bind(A_ip_port)
# while 1:
#     msg, addr = A.recvfrom(1024)
#     print(msg.decode("utf-8"))
    # say = input("wo:")
    # A.sendto(say.encode("utf-8"), server_ip_port)

# udp_c = socket.socket(type=2)
# s_ipport = ("192.168.15.102", 20800)
# udp_c.sendto(b"who is it?", s_ipport)
# s, a = udp_c.recvfrom(1024)
# print(s.decode("utf-8"))

# B = socket.socket(type=socket.SOCK_DGRAM)
# server_ip_port = ("192.168.15.102", 20800)
# B_ip_port = ("192.168.15.102", 20801)
# to = input("who is it that you want to send msg?")
# while 1:
#     b_say = input("B:")
#     msg = to + "+" + b_say
#     B.sendto(msg.encode("utf-8"), server_ip_port)
#     # msg_a, address = B.recvfrom(1024)
    # print(msg_a.decode("utf-8"))

# import socket
# server = socket.socket(type=2)
# server_ip_port = ip_port = ("192.168.15.102", 20800)
# dic = {"a": ("192.168.15.102", 20802), "b": ("192.168.15.102", 20801)}
# server.bind(server_ip_port)
# while 1:
#     msg, addr = server.recvfrom(1024)
#     msg_to = msg.decode("utf-8").split("+", maxsplit=1)
#     to_ip_port = dic[msg_to[0]]
#     server.sendto(msg_to[1].encode("utf-8"), to_ip_port)

# 格式:
print('\033[0;32;40m欢迎使用\033[599;54;0m学生选课系统')

 

posted @ 2018-10-16 21:22  python传言  阅读(138)  评论(0编辑  收藏  举报