套接字类似于通讯工具
# 客户端
import socket
if __name__ == '__main__':
# 1.创建客户端套接字对象
tcp_client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM )
# 2.和服务端套接字建立连接
tcp_client_socket.connect(('127.0.0.1', 8080))
# 3.发送数据
tcp_client_socket.send("nihao".encode(encoding="utf-8"))
# 4.接收数据
recv_data = tcp_client_socket.recv(1024)
print(recv_data.decode(encoding="utf-8"))
# 5.关闭客户端套接字
tcp_client_socket.close()
客户端主动发起连接,需要有connect
# 服务端
import socket
if __name__ == '__main__':
# 1.创建服务端套接字对象
# 这个socket只负责监听,不负责发送数据
tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 设置端口复用
tcp_client_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
# 2. 绑定Ip地址和端口号
tcp_server_socket.bind(("127.0.0.1", 8888))
# 3.设置监听
# 128:代表服务端等待排队连接的最大数量
tcp_server_socket.listen(128)
# 4.等待接受客户端的连接请求
# accept阻塞等待, 返回一个用于和客户端通信的socket、客户端地址
conn_socket, ip_port = tcp_server_socket.accept()
print("客户端地址:", ip_port)
# 5.接受数据
recv_data = conn_socket.recv(1024)
print("接收到的数据:", recv_data.decode())
# 6.发送数据
conn_socket.send("客户端你的数据我收到了".encode())
# 7.关闭套接字
conn_socket.close()
tcp_server_socket.close()
注意点:
缓冲区:当发送的数据达到一定数量的时候,才发送。先保存到缓冲区