socket可以实现两个程序(一边是服务端,一边是客户端)的通信,一台电脑两个程序通信可以或者局域网里的两台电脑可以通信,但是公网的或不同局域网的两台电脑通信涉及的网关等内容,故本博客只简单说明一台电脑中的两个程序通信。话不多说,直接上代码。
1. 服务端
import socket
server = socket.socket() #调用socket模块中的socket类
server.bind(('localhost', 1666)) #绑定本机IP地址,直接使用localhost也可以,并分配一个本机的端口
server.listen(5) #监听客户端
exi = '' #结束标志符
while True:
c, addr = server.accept() #会一直等待,直到连接客户端成功
print('Connect with: ', addr)
while c: #一直循环,直到客户端关闭
dat = c.recv(1024).decode('utf-8') #会一直等待,直到接收客户端数据,并使用utf-8解码
if dat == 'break':
exi = 'break'
break
print('Reciving data: ', dat)
sr = input('Please reply something: ')
c.send(sr.encode('utf-8')) #反馈给客户端的数据
if exi == 'break':
break
print('The client lost, waiting to reconnect to other client. ')
server.close()
2. 客户端
import socket
client = socket.socket()
client.connect(('localhost', 1666)) #连接到服务端IP地址,本机可直接使用localhost
while True:
msg = input("Please input something or 'break' to quit: ")
if not len(msg):
continue
client.send(msg.encode('utf-8')) #发送给服务端的数据
if msg == 'break':
break
print(client.recv(1024).decode('utf-8')) #接受服务端反馈的数据并使用utf-8解码
client.close()
3. 程序运行效果
先执行服务端程序,再运行客户端程序即可,效果如下图所示。