今日所学
# socket是一个接口,内部帮你封装了一堆协议
# 导入socket模块
import socket
# 要找到这台电脑上的应用程序的端口和ip地址
# 作为服务器必须明确自己的ip和端口号,并且不能经常变化
# 参数1指定 socket类型AF_INET 表示网络类型即 ip 类型,ipv4,目前大多数的ip地址类型
# 参数2 指定的是传输协议 SOCK_STREAM 表示TCP协议 SOCK_DGRAM 表示UDP协议
# 导入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
# server = socket.socket()
# 无论是服务器端还是客户端都用socket
# 为服务器绑定ip 和端口号 ip一定是本机ip,本机可能会有多个ip,用自己真实的ip
# 正常开发中,此时就是建立连接的那个电脑的ip 和端口
# 注意:需要参数是一个元组 端口就是普通整数
server.bind(("127.0.0.1", 1688)) #插入手机卡
# 正常开发中,此时就是建立连接的那个电脑的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)) #三次握手, 连接服务器,
# 作为客户端 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不会卡,如果数据量很大就会阻塞
# 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("服务器强行关闭")
# 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("服务器关机")
#accept是一个阻塞函数,会一直继续等待客户端发送数据,直到有数据进入再继续运行
client, addr = server.accept() #链接 完成三次握手
print("握手成功")
# 收发数据,注意都是用表示客户端的socket来收发数据
# client.send("word".encode("utf-8")) #发数据
data = client.recv(1024)
print("客户端发来的数据",data)
# client.close() #结束传输 四次挥手,断开连接
server.close() #结束,关机关闭服务器
print("服务器关机")