socket套接字——TCP服务器实现

|▌冷眼眸甩不掉的悲伤 提交于 2020-01-11 01:50:47

TcpServer.py

import socket
from time import ctime

HOST='localhost'
PORT=5008
BUF_SIZE=1024
ADDRESS=(HOST,PORT)

if __name__=='__main__':
    #新建socket连接
    server_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    #将套接字与指定的ip和端口相连
    server_socket.bind(ADDRESS)
    #启动监听,并将最大连接数设置为5
    server_socket.listen(5)
    print("[***] 正在监听: %s:%d"%(HOST,PORT))
    #setsockopt()函数用来设置选项,结构是setsocketopt(level,optname,value)
    #level定义了哪个选项将被使用,通常是SOL_SOCKET,意思是正在使用的socket选项
    #socket.SO_REUSEADDR表示socket关闭后,本地端用于该socket的端口号立刻就可以被重用
    #通常来说,只有经过系统定义一段时间后才能被重用
    server_socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
    while True:
        print(u'服务器等待连接...')
        #当有连接时,将接收到的套接字存到client_socket中,远程连接细节保存到address中。
        client_sock,address=server_socket.accept()
        print(u'连接客户端地址:',address)
        while True:
            #打印客户端发送的消息
            data=client_sock.recv(BUF_SIZE)
            if not data or data.decode('utf-8')=='END':
                break
            print('来自客户端的消息:%s'%data.decode('utf-8'))
            print('发送服务器时间给客户端:%s'%ctime())
            try:
                #发送时间
                client_sock.send(bytes(ctime(),'utf-8'))
            except KeyboardInterrupt:
                print('用户取消')
        #关闭客户端socket
        client_sock.close()
    #关闭socket
    sever_socket.close()

TcpClient.py

 

import socket
import sys

HOST='localhost'
PORT=5008

if __name__=='__main__':
    try:
        sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    except socket.error as err:
        print('创建socket实例失败')
        print('原因:%s'%str(err))
        sys.exit()
    print(u'socket实例创建成功!')
    try:
        sock.connect((HOST,int(PORT)))
        print('socket已经连接上目标主机:%s,连接的目标主机端口:%s'%(HOST,PORT))
        sock.shutdown(2)
    except socket.error as err:
        print(u'连接主机:%s端口:%s失败'%(HOST,PORT))
        print('原因:%s'%str(err))
    sys.exit();

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!