一个简单的会先客户端/服务器应用

来源:互联网 发布:淘宝的笛子 编辑:程序博客网 时间:2024/04/29 22:08

不管服务器从客户端收到什么输入,都会将其回显出来,在命令行中指定TCP接口

几个注意的地方:

要使用socket.error要记得提前导入"from socket import error"

用docopt从命令行中取得端口号,这是字符串类型的,因为是端口号,从命令行取出来后要变成整型  int(  )就ok


python3中socket的send()和sendall()的参数得是字节类型的,recev返回的也是字节类型的




字节转换为字符串:byte.decode()

字符串转化换为字节:str.encode()


"""Socket Server ExampleUsage:    server <port>"""from docopt import docoptimport socketfrom socket import errorhost='localhost'backlog=5buffersize=2048def echo_server(port):    sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)    sock.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)    server_address=(host,port)    sock.bind(server_address)    sock.listen(backlog)    while True:        print("Waiting to receive message from client")        client,address=sock.accept()#client是新的套接字对象,address是连接客户端的地址        data=client.recv(buffersize)//这里返回字节bytes类型        if data:            print("Data:%s"%data)            client.send(data)//这里可以正常send            print("send %s bytes to %s"%(data,address))        client.close()if __name__=='__main__':    argument=docopt(__doc__)    port=int(argument['<port>'])    # print(port)    echo_server(port)


"""Socket Client ExampleUsage:    server <port>"""from docopt import docoptimport socketimport sysfrom socket import errnohost='localhost'buffersize=16def echo_client(port):    sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)    server_address=(host,port)    print("connect to %s port %s"%server_address)    sock.connect(server_address)    #连上之后要发送数据啦    try:        message="Test message.This will be echoed"//message是str        print("send:%s"%message)        sock.sendall(message.encode())//这里的参数得是字节类型的        amount_received=0        amount_expected=len(message)        while amount_received<amount_expected:            data=sock.recv(buffersize)            amount_received+=len(data)            print("Received:%s"%data)    except socket.error as e:        print("Socket error:%s"%str(e))    except Exception as e:        print("other Expection:%s"%str(e))    finally:        print("closing connection to the server")        sock.close()if __name__=='__main__':    argument=docopt(__doc__)    port=int(argument['<port>'])    echo_client(port)







0 0
原创粉丝点击