TCP案例
案例一:循环为客户服务
1 import socket
2
3
4 def main():
5 # 1.创建套接字
6 tcp_client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
7
8 # 2.绑定本地信息
9 tcp_client_socket.bind(("", 7890))
10
11 # 3.listen使套接字变为被动链接
12 tcp_client_socket.listen(128)
13
14 while True:
15 # 4.监听
16 print('等待一个新的客户端到来...')
17 new_tcp_socket, socket_addr = tcp_client_socket.accept()
18 print('一个新的客户端已经到了{}'.format(socket_addr))
19
20 while True:
21 # 5.接收发送数据
22 recv_data = new_tcp_socket.recv(1024)
23 print('接收的数据是{},'.format(recv_data.decode('gbk')))
24 if recv_data:
25 # 回送一部分数据给客户端
26 new_tcp_socket.send('Hello'.encode('gbk'))
27 else:
28 break
29 # 6,关闭套接字
30 # 关闭accept返回的套接字,意味着不会再为这个客户端服务
31 new_tcp_socket.close()
32 print('已经服务完毕!')
33 # 如果将监听套接字关闭了,那么会导致不能再次等待新的客户端的到来即xxx.accept就会失败
34 tcp_client_socket.close()
35
36
37 if __name__ == "__main__":
38 main()
案例二:下载文件
(1)客户端
1 import socket
2
3
4 def main():
5 # 1.创建套接字
6 tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
7
8 # 2.获取服务器的ip和端口
9 dest_ip = input('请输入下载服务器的ip:')
10 try:
11 dest_port = int(input('请输入下载服务器的port:'))
12 except:
13 print('输入的端口号有误,请重新输入:')
14 dest_port = int(input('请输入下载服务器的port:'))
15
16 # 3.连接服务器
17 tcp_socket.connect((dest_ip, dest_port))
18
19 # 4.获取下载文件名称
20 download_file_name = input('请输入需要下载的文件名称:')
21
22 # 5.将文件名字发送到服务器
23 tcp_socket.send(download_file_name.encode('gbk'))
24
25 # 6.接收文件的数据
26 recv_data = tcp_socket.recv(1024 * 1024)
27
28 # 7.保存接收的数据到一个文件中
29 if recv_data:
30 with open('[接收]'+download_file_name, 'wb') as f:
31 f.write(recv_data)
32
33 # 8.关闭套接字
34 tcp_socket.close()
35
36
37 if __name__ == '__main__':
38 main()
(2)服务端
1 # -*- coding: utf-8 -*-
2 import socket
3
4
5 def send_file_2_client(new_client_socket, client_addr):
6 # 5.接收客户端发过来的要下载的文件名
7 file_name = new_client_socket.recv(1024)
8 print('客户端{}需要下载的文件是{}'.format(str(client_addr), file_name))
9
10 # 6.打开文件,读取数据
11 file_content = None
12 try:
13 f = open(file_name,'rb')
14 file_content = f.read()
15 f.close()
16 except Exception as ret:
17 print('没有要下载的文件{}'.format(file_name))
18
19 # 7.发送数据给客户端
20 if file_content:
21 new_client_socket.send(file_content)
22
23 def main():
24 # 1.创建套接字
25 tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
26
27 # 2.绑定本地信息
28 tcp_server_socket.bind(("", 7800))
29
30 # 3.让默认的套接字有主动变为被动listen
31 tcp_server_socket.listen(128)
32
33 # 4.等待客服端的连接
34 new_client_socket, client_addr = tcp_server_socket.accept()
35
36 while True:
37 # 调用发送文件函数,完成为客户端服务
38 send_file_2_client(new_client_socket, client_addr)
39
40 # 7.关闭套接字
41 new_client_socket.close()
42 tcp_server_socket.close()
43
44
45 if __name__ == '__main__':
46 main()
作者:Ambitious
-------------------------------------------
个性签名:独学而无友,则孤陋而寡闻。做一个灵魂有趣的人!
如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!
万水千山总是情,打赏一分行不行,所以如果你心情还比较高兴,也是可以扫码打赏博主,哈哈哈(っ•̀ω•́)っ✎⁾⁾!