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

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();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值