import socket
# 获取手机对象 conn
phone = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 发送连接请求 输入服务端的ip及端口
phone.connect(('127.0.0.1', 8080))
# 发送消息
phone.send('hello world 美丽心灵'.encode('utf-8'))
# 接收消息
data = phone.recv(1024)
print(data.decode('utf-8'))
# send首先是将数据传入本机的操作系统
# recv首先是获取本机的操作系统的数据
# 一次send未必对应一次recv
# 必须关闭
phone.close()
import socket
from time import sleep
# 创建基于网络通信的流式传输的套接字对象
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 127.0.0.1 测试时使用,只有本机可访问,其他局域网内的主机无法访问
# 0.0.0.0 服务器使用,任何主机都可以访问该地址
# 传入一个元组,绑定ip与端口
server.bind(('127.0.0.1', 8080))
# 进入监听状态 将半连接池的大小设置为6
# 池中超过6个客户端时,就不会再接收新的客户端请求,导致新客户端操作超时
server.listen(6)
# 获取电话phone对象 conn 等待连接请求
# accept: 从半连接池中取出一个链接请求
phone, client_addr = server.accept()
print(phone)
#
print(client_addr)
# ('127.0.0.1', 50083)
# 通信
# 接收消息 指定接收最大的数据为1024字节
data = phone.recv(1024)
print(data.decode('utf-8'))
# 发送消息
phone.send(data.upper())
# 关闭电话连接
sleep(20)
phone.close()
# 关闭服务端(可选) 一般不关闭
# server.close()
"""
套接字:
应用层与传输层之间的一组接口 对传输层以下进行了封装
同一台机器,不同应用程序之间的数据交互,可以通过硬盘进行
不同的机器,两个应用程序之间的数据交互,可以通过套接字进行
AF_INET 基于网络的套接字
AF_UNIX 基于文件的套接字
"""