面向连接方式,在通信发生之前先建立起一个连接,类似打电话,使用虚拟线路类型的套接字,实现这种连接方式的基本协议是传输控制协议(Transmission Control Protocol, TCP)。这种通信方式又叫做“虚拟线路”或”流式套接字“。
代码如下:
tcpSocket=socket(AF_INET,SOCK_STREAM)
无连接方式,在通信开始前不用建立连接,类似邮递,使用数据图类型的套接字,实现这种连接方式的基本协议是用户数据图协议(User Datagram Protocol, UDP)。
代码如下:
udpSocket=socket(AF_INET,SOCK_DGRAM)
from socket import * print '***** Now starting server *****' Host='' Port=12306 Buffsize=1024 Addr=(Host,Port) ServerSocket=socket(AF_INET,SOCK_STREAM) #初始化一个TCP套接字 print '* Initing connection...' ServerSocket.bind(Addr) #绑定到地址绑定到套接字上 ServerSocket.listen(5) #设置和启动TCP监听程序,参数指定最多允许多少个客户连接到服务器 print '* Connection inited...' while True: print '* Now waiting for connection...\n' ClientSocket,addr=ServerSocket.accept() #接受客户连接(阻断) print '* Connected from',addr ClientSocket.send('Server: Connect successfully') while True: data=ClientSocket.recv(Buffsize) #接受TCP消息 print '* Client: ',data if data == 'quit': print '\n* Client ',addr,' disconnected' break ClientSocket.send('Server: Message[ %s ] send successfully' % data) #返回信息给客户端 ClientSocket.close() ServerSocket.close()
from socket import * print '***** Now starting client *****' Host='localhost' Port=12306 Buffsize=1024 Addr=(Host,Port) ClientSocket=socket(AF_INET,SOCK_STREAM) #初始化一个TCP套接字 ClientSocket.connect(Addr) #指定地址对TCP服务器进行连接 print 'Trying to connect to the server' data=ClientSocket.recv(Buffsize) #接受TCP消息 print data while True: data=raw_input('> ') #从控制台输入消息 if not data: break ClientSocket.send(data) #传输TCP消息给服务器 data=ClientSocket.recv(Buffsize) #获取TCP消息 if not data: break print data ClientSocket.close()
from socket import * print '***** Now starting server *****' Host='' Port=12306 Buffsize=1024 Addr=(Host,Port) ServerSocket=socket(AF_INET,SOCK_DGRAM) #初始化一个UDP套接字 ServerSocket.bind(Addr) print '* Initing connection...' while True: print '* Now waiting for message...\n' data , addr=ServerSocket.recvfrom(Buffsize) print '* Get message from',addr ServerSocket.sendto('Server: Message [ %s ] send successfully' % data,addr) #返回信息给客户端 print '* Client : %s' %data ServerSocket.close()
from socket import * print '***** Now starting client *****' Host='localhost' Port=12306 Buffsize=1024 Addr=(Host,Port) ClientSocket=socket(AF_INET,SOCK_DGRAM) #初始化一个TCP套接字 while True: data=raw_input('> ') #从控制台输入消息 if not data: break ClientSocket.sendto(data,Addr) #传输UDP消息给服务器 data,addr=ClientSocket.recvfrom(Buffsize) #获取UDP消息 if not data: break print data ClientSocket.close()