• python实现一个客户端与服务端的通信


    函数介绍

    Socket对象方法:
    服务端:

    函数 描述
    .bind() 绑定地址关键字,AF_INET下以元组的形式表示地址。常用bind((host,port))
    .listen() 监听TCP,可以挂起的最大连接数,该值至少为1,一般设为5即可
    .accept() 被动接受TCP客户端的连接

    客户端:

    函数 描述
    .connect() 初始化服务器连接
    .connect_ex() 是对connect()函数的扩展,当出错时返回出错码,不报异常

    其它函数:

    函数 描述
    .recv() 接收数据,数据以字符串的形式返回,bufsize指定接收的最大数据量。
    .send() 发送数据,将string中的数据发送到连接的套接字,返回值是要发送的字节数量,通常使用.encode()函数对数据进行转码
    .senddall() 发送完整的数据,在返回之前会尝试发送所有数据,成功返回None,失败则抛出异常。
    .recvfrom() 与recv()函数类似,不同的是返回值是(data,address),其中data是包含接收数据的字符串,address是发送数据的套接字地址。
    .sendto() 发送UDP数据,将数据发送到套接字,形式是(ipaddr,port)的元组。
    .close() 关闭套接字

    服务端

    使用socket函数来创建一个socket对象,并设置一个socket服务,然后通过bind(hostname,port)函数来指定一个端口,使用socket对象的accept方法,等待客户端的连接,并返回connection对象。
    具体步骤为:

    创建服务端套接字
    serversocket=socket()
    把地址绑定到套接字
    serversocket.bind()
    对连接进行监听
    serversocket.listen()
    使用一个while进行循环,并接收客户端的连接
    while True:
      serverclient=serversocket.accept()
      while True:
         #接收已发送
         serverclient.recv()
         serverclient.send()
         #关闭客户端套接字
         serverclient.close()
    关闭服务端套接字
    serversocket.close()
    

    具体代码实现:

    import socket
    import sys
    import time
    
    serversocket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    host=socket.gethostname()#获取本地主机名
    port=9999
    #绑定端口号
    serversocket.bind((host,port))
    
    #设置最大连接数
    serversocket.listen(5)
    while True:
        print('服务器启动,监听客户端链接')
        clientsocket,addr=serversocket.accept()
        print('链接地址:%s' % str(addr))
        while True:
            try:
                data=clientsocket.recv(1024)
            except Exception:
                print('断开的客户端:',addr)
                break
            print('客户端发送内容:',data.decode('utf-8'))
            reply=input('回复:').strip()
            if not reply:
                break
            msg=time.strftime('%Y-%m-%d %X')#获取结构化时间戳
            msg1='[%s]:%s'% (msg,reply)
            clientsocket.send(msg1.encode('utf-8'))
        clientsocket.close()
    serversocket.closel()
    

    实现功能:通过while实现循环接收客户端发送的数据,并对客户端发送的数据进行显示并返回给客户端数据,返回给客户端的数据信息后加入时间戳。

    客户端

    创建一个客户端用来连接以上服务的的服务,使用socket.connect()方法打开一个TCP连接到主机,连接后可以从服务端获取数据,在操作完成后关闭连接。 具体步骤为: ``` 创建客户端的套接字 client=socket() 尝试连接服务器 client.connect() 发送并接收数据 client.send() client.recv() 关闭客户端套接字 client.close() ``` **具体代码实现:** ``` import socket import sys

    s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    host=socket.gethostname()
    port=9999
    s.connect((host,port))
    while True:
    data= input('>>').strip()
    if not data:
    break
    s.send(data.encode('utf-8'))
    msg=s.recv(1024)
    if not msg:
    break
    print(msg.decode('utf-8'))
    s.close()

    ###测试###
    使用cmd命令行中打开到代码所在文件目录,执行python 服务端文件名.py,再另打开一个cmd命令界面执行  python 客户端文件名.py
    在pycharm中运行服务端代码,运行结果:
    
    ![](https://img2018.cnblogs.com/blog/989555/202002/989555-20200209134606487-1326198410.png)
    
    在cmd中运行客户端代码,运行结果:
    
    ![](https://img2018.cnblogs.com/blog/989555/202002/989555-20200209132403132-1188987226.png)
    </font>
  • 相关阅读:
    PHP面向对象(一)
    Linux(九)LNMP环境Nginx服务器
    Linux(八)Apache服务器
    [转]PHP高手干货分享:不能不看的50个细节!
    Linux(七)LAMP环境搭建
    Linux(六)Samba服务器与防火墙
    Linux(五)服务和进程管理
    Linux(四)用户和用户组管理
    Linux(三)安装包
    Linux(二)Linux常用命令
  • 原文地址:https://www.cnblogs.com/supershuai/p/12286933.html
Copyright © 2020-2023  润新知