功能很简单,首先运行Server,当启动Client并向Server发送‘hi’时, Server回答一句问候语,当Client发送其他信息时,Server回答'bye'并关闭连接、退出。
Server端:
import sys, socket
serv = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
serv.bind(('localhost',7788))
serv.listen(2)
while True:
connection,address = serv.accept()
try:
connection.settimeout(35)
buf = connection.recv(1024)
if buf=='hi':
connection.send('welcome to server!')
else:
connection.send('bye!')
connection.close()
sys.exit(0)
except socket.timeout:
print 'time out!'
Client端:
import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(('localhost', 7788))
import time
time.sleep(2)
sock.send('hi')
print sock.recv(1024)
sock.close()
注意Server和Client都在本机运行时,要在不同的软件上运行, 例如Server用WingIDE跑,Client用PyScripter跑。
Server端通信的基本过程是:建立socke对象->bind->listen->connection周期->close, 其中connection周期是: 首先用socket server的accept方法生成一个新的socket对象(习惯上成为connection), 然后用connection的send/rec方法发送/接收数据, 最后调用connection的close方法关闭连接。 由于服务器经常要以“服务”的形式不断处理客户连接, 因此connection周期通常要放在一个循环体里。
Client端通信的基本过程是:建立socke对象->connect->send/recv->close。