下面是其他相关的终端的创建:
Socket之TCP客户端【Python】
Socket之UDP服务器【Python】
Socket之UDP客户端【Python】
创建TCP服务器
首先,我们先创建一段通用TCP服务器的一般伪代码,然后对这些伪代码进行描述。这仅仅是我们设计网络通信服务器的一种模式,只要熟悉了这种设计模式,我们就可以根据自己的需要修改伪代码来操作服务器了。
sc=socket() #创建服务器的套接字
sc.bind() #使用套接字绑定地址和端口号
sc.listen() #监听客户端的连接
inf_loop: #服务器无限的循环
cs=sc.accept() #接受客户端的连接
comm_loop: #通讯循环
cs.recv()/cs.send() #通讯对话,接受和发送消息
cs.close() #关闭客户端套接字
sc.close() #关闭服务器套接字。可选
所有的套接字都是通过使用socket.socket()函数创建的,同时服务器的使用也需要占用一个端口号并等待客户端的请求,所以说服务器也必须绑定到一个本地的地址。又因为TCP是一种面向连接的通信系统,所以在TCP服务器开始操作之前,我们需要安装一些基础的设施。特别地,TCP服务器必须监听客服端传入的连接,等这些所有的准备工作做好后,服务器和客户端之间的通讯就可以开始进入到无线的通信循环之中了。
在调用accept()函数之后,就开启了一个简单的单线程,服务器就会等待客户端的连接。在默认的情况下,accept()是阻塞的,这就意味着执行被暂停,直到一个的新的连接到达。除此之外,套接字也是支持非阻塞模式,在这里,我们不做过多的涉及。
一旦服务器接受了一个新的连接,就会返回(使用accept() 函数)一个独立的客户端套接字,用来和即将到来的信息进行通讯交换。
创建好了临时的套接字,通讯就可以开始了。通过使用这个新的套接字,客户端和服务器就可以开始参与发送和接受的对话之中了,直到连接结束。当一方关闭连接或者对方发送一个空字符时,就会关闭连接。
在代码中,当一个客户端连接关闭之后,服务器就会等待另一个客户端的连接。在伪代码的最后一行是可选的。这里指的是关闭服务器套接字。在真正的开发中不会碰到的,因为服务器必须一直对外提供服务。在这里使用close()方法,是提示我们在设计一个智能 的服务器退出服务时,是一个很好的选择。
接下来创建一个TCP服务器,让它接受来自客户端的消息,返回的时候并加上时间戳的相同消息。
from socket import *
from time import ctime
HOST =' '
PORT =' 2341'
BUFSIZ =1024
ADDR=(HOST,PORT)
tcpSerSock=socket(AF_INET,SOCK_STREAM)
tcpSerSock.bind(ADDR) #绑定IP地址和端口号
tcpSerSock.listen(5) #监听,使得主动变为被动
while True:
print('正在等待连接....')
tcpCliSock,addr=tcpSerSock.accept() #当来新的连接时,会产生一个的新的套接字为客户端服务
print('收到来自%d的连接.......'%addr)
while True:
data=tcpCliSock.recv(BUFSIZ) #接受数据,缓存区设置为1kb
if not data:
break
tcpCliSock.send('[%s] %s' %(bytes(ctime( ),'utf-8'),data)) #加上时间戳,并对数据编码
tcpCliSock.close( )
tcpSerSock.close()