day31

今日所学

# socket是一个接口,内部帮你封装了一堆协议
# 导入socket模块
import socket
# 要找到这台电脑上的应用程序的端口和ip地址
# 作为服务器必须明确自己的ip和端口号,并且不能经常变化
# 参数1指定 socket类型AF_INET  表示网络类型即 ip 类型,ipv4,目前大多数的ip地址类型
# 参数2 指定的是传输协议 SOCK_STREAM 表示TCP协议    SOCK_DGRAM 表示UDP协议
server = socket.socket(socket.AF_INET6,socket.SOCK_STREAM)     #买电话机
# 默认就是网络类型 TCP协议
# server = socket.socket()
# 无论是服务器端还是客户端都用socket
# 为服务器绑定ip 和端口号 ip一定是本机ip,本机可能会有多个ip,用自己真实的ip
# 正常开发中,此时就是建立连接的那个电脑的ip 和端口
# 注意:需要参数是一个元组    端口就是普通整数
server.bind(("127.0.0.1", 1688))         #插入手机卡

# 开始监听1688这个端口    盯着这个端口看有没有数据过来
server.listen()  #手机开始待机

# 接受链接请求
# 链接建立会返回给客户端两个参数
# 第一个表示客户端的socket     第二个客户端的地址信息
# accept 是一个阻塞函数,会一直等到有客户端连接过来,再继续执行
client, addr = server.accept()   #接电话
print(type(client))
print(addr)
# 收发数据
data = client.recv(1024)
print(data)
import socket

# 买个电话
client = socket.socket()
# 连接服务器
# 作为客户端 ip和端口可以变化 所有系统会自动分配随机端口给客户端
# connect本质是在进行三次握手,也是一个数据传输的过程,如果服务器没有立马响应 也会阻塞
client.connect(("127.0.0.1", 1688))      #三次握手,  连接服务器,

# 开始通话
# 发送数据,因为是字符串,所以要把发送的内容需要转码成二进制
# 发数据要给服务器,send把数据交给操作系统,后续的发送应用程序无法控制,send一般不会卡
client.send("hello".encode("utf-8"))

# 接收数据
data = client.recv(1024)
print(data)

# 结束
client.close()
 
import socket
client = socket.socket()
# connect本质是三次握手,也是一个数据传输的过程,如果服务器没有立马响应,也会阻塞
# 所以connect与会卡,但是不会卡太久
client.connect(("127.0.0.1", 6667))  # 连接服务器,三次握手,相互传数据
print("握手成功!,")
# 收发数据,本质是把数据交给操作系统发送,一旦数据交给操作系统,以后的数据应用程序就无法控制,所以send不会卡,如果数据量很大就会阻塞
# client.send("hello".encode("utf-8"))  # 发送数据
# print("发送完成")
#操作系统把数据先丢进缓存中,recv读取数据是从操作系统缓存区读取数据,
# 如果当前还没有任何数据,就会进入阻塞,会一直等到有数据到来,再继续执行
# try:
#     data = client.recv(1024)  # 接受数据,给一个接受长度
#     print("接受完成")
#     print(data)
# except:
 client.close()  # 结束,关机
print("服务器强行关闭")
 
 
import socket

server = socket.socket()
server.bind(("127.0.0.1", 6667))                #确认自己的ip和端口 绑定地址
server.listen()                               #监听数据
#accept是一个阻塞函数,会一直继续等待客户端发送数据,直到有数据进入再继续运行
client, addr = server.accept()                 #链接    完成三次握手
print("握手成功")
# 收发数据,注意都是用表示客户端的socket来收发数据
# client.send("word".encode("utf-8"))                                     #发数据
data = client.recv(1024)
print("客户端发来的数据",data)
# client.close()                                         #结束传输  四次挥手,断开连接
server.close()                                     #结束,关机关闭服务器
print("服务器关机")
原文地址:https://www.cnblogs.com/Fzhiyuan/p/10940374.html