继续有关socket的相关知识实践
socket是python 自带的包,不需要额外安装
本文使用tcp协议,相比较udp较为可靠,多用于客户机和服务机之间
准备:
- 一台安装了虚拟机(VMware)的电脑(或者两台电脑( ̄︶ ̄)↗ )
- 主机和虚拟机都安装了python, 并且都有IDE
我的配置:
- win10主机,Ubuntu虚拟机
- IDE为pycharm
在创建聊天工具之前,我们需要知道主机和虚拟机的ip
对于Ubuntu,右键打开终端,输入一下命令查看ip
ifconfig
对于win, win+cmd打开终端,输入一下命令查看ip
ipconfig
我的win主机ip和虚拟机ip分别为
192.168.1.2 # win
192.168.48.142 # Ubuntu
知道ip我们就可以配置了
ubuntu 充当服务器端
import socket
def main():
# 创建服务器套接字
tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 绑定ip和port
tcp_server_socket.bind(('192.168.48.142', 7890))
# 创建监听,参数为最大挂起连接数
tcp_server_socket.listen(128)
# 多用户访问循环
while True:
# 接受到用户访问,生成对应用户的套接字
new_client_socket, client_addr = tcp_server_socket.accept()
# 单用户循环访问,用来解决同一个用户的多次请求
while True:
recv_data = new_client_socket.recv(1024)
print(recv_data.decode('utf-8'))
if recv_data:
new_client_socket.send('Thank you!'.encode('utf-8'))
else:
break
new_client_socket.close()
tcp_server_socket.close()
if __name__ == '__main__':
main()
win充当客户端
import socket
def main():
tcp_client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
service_ip = '192.168.48.142'
server_port = 7890
server_addr = (service_ip, server_port)
tcp_client_socket.connect(server_addr)
send_data = input('please enter:')
tcp_client_socket.send(send_data.encode('utf-8'))
# 接受客户端反馈
recv_data = tcp_client_socket.recv(1024)
print(recv_data.decode('utf-8'))
tcp_client_socket.close()
if __name__ == '__main__':
main()
通信效果如下