众所周知的tcp/ip协议为我们提供了计算机之间网络通信的标准。操作系统的tcp/ip软件组件为我们提供了基于tcp/ip协议的通信。操作系统为了开发者方便直接调用tcp/ip组件,为我们提供了API,它就是socket。python自带socket模块。
主动发起连接的计算机我们称之为 客户端。被动接受的称之为服务端。我们设想一层楼,有很多的房间,这些房间有一条公共的电话线路,每个房间有很多的可供安装电话单机的孔,每个孔对应一个电话号码。现在位于A房间的张三要给位于B房间的李四打电话。首先在B房间李四要接上一部电话单机,假设其接电话的孔号码为4000。然后张三开始连接李四,张三随便选择自己一个空闲的孔安装上电话单机,然后拨号码,要指定是B房间,而且要指定号码4000,这样电话就可以接通了,张三李四就可以通话了。
房间相当于主机,电话孔相当于端口。A是客户端,B是服务端。服务端只需要指定自己的电话单机装在哪个孔上,就可以等着电话了。当然为了避免骚扰也可以指定只有A房间的电话才能打进来。客户端要指定对方的房间和孔的号码。
服务端:
import socket
host=''
port=3000
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.bind((host,port))
s.listen(1)
while 1:
c,addr=s.accept()
c.makefile('rw').write('hello,i am zhangyuanbin')
c.close()
客户端:
import socket
port=3000
host='192.168.56.1'
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect((host,port))
while 1:
buf=s.recv(2048)
if not len(buf):
break
print(buf.decode('utf-8'))
就可以进行通信了。