前言
TCP应该分为服务器和客户端,应该先打开服务器再打开客户端
服务器端
主要步骤
- 买个手机 (创建套接字 socket)
- 插入手机卡 (为套接字绑定端口和ip bind)
- 将手机设置为正常的响铃状态 (让默认的套接字由主动到被动 listen)
- 等待电话的到来 (等待客户端的连接 accept)
第一个while,循环为多个客户端服务, 第二个while,为一个客户端收发多条数据
服务器端主要代码:
def main():
tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
local_server = ("", 2525)
tcp_socket.bind(local_server)
tcp_socket.listen(128)
while True:
# 返回一个元组,如果这么写,相当于拆包
client_socket, client_adress = tcp_socket.accept()
print("新的客户端来啦")
while True:
# 接收客户端发来的数据
client_data = client_socket.recv(1024)
# print(client_data[0].decode("utf-8"))
print(client_data.decode("utf-8"))
if client_data: # 如果有数据
# 向客户端回复一个数据
data = input("请回复一个数据")
client_socket.send(data.encode("utf-8"))
else:
print("客户端已停止运行")
break
# 关闭(注意:这要写在循环里)
client_socket.close()
tcp_socket.close()
if __name__ == '__main__':
main()
注意:
- accept指在等待客户端发消息
- 调用accept返回一个元组,如果用两个参数接收,相当于拆包,第一个参数是客户端的socket,第二个参数相当于客户端的ip
客户端
步骤:
- 创建socket套接字对象
- 指定要连接到哪台服务器 connect
- 发送数据
- 关闭连接
import socket
def main():
tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
tcp_socket.connect(("127.0.0.1", 2525))
while True:
data = input("请输入要发送的数据")
tcp_socket.send(data.encode("utf-8"))
data = tcp_socket.recvfrom(1024)
print(data)
tcp_socket.close()
if __name__ == '__main__':
main()
注意:
tcp在写创建socket对象的时候,第二个参数为
socket.SOCK_STREAM
放荡不羁,意往九天采星辰。桀骜难驯,策马看尽长安花。