Python3:python的网络编程(使用socket实现客户端和服务器通信)

1.声明

当前的学习来源:自学书籍
python中的socket编程就像java中的编程一样,也是创建一个socket套接字,通过accept和send方式发送和接受数据!

2.创建一个serverSocket

1.当前的服务器socket需要绑定地址,需要等待当前的客户端连接,需要读取当前的客户端的数据,需要发送数据给客户端

2.在使用socket的时候需要导入socket模块

# 使用python中的网络编程
import socket
import time

# 创建一个tcp/ip协议的套接字
tcpSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 创建一个udp/ip的套接字
# udpSocket=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
host = "localhost"
port = 8888
buffer_size = 1024
address = (host, port)
# 开始绑定地址
tcpSocket.bind(address)
tcpSocket.listen(5)

while True:
    print("服务器等待被连接中。。。。。")
    clientSock, client_addr = tcpSocket.accept()
    print("已经连接到客户端,连接地址:{0}".format(client_addr))
    try:
        while True:
            data = clientSock.recv(buffer_size)
            print("接收客户端的数据为:{0}".format(str(data, encoding="utf8")))
            if data.upper() == "EXIT":
                break
            now_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
            clientSock.send(bytes("时间={0},数据={1}".format(now_time, str(data, encoding="utf8")), encoding="utf8"))

    except Exception as e:
        print(e)
    finally:
        clientSock.close()

tcpSocket.close()

3.当前的serverSocket通过recv方式接收客户端发送的数据,会出现一个需要bytes却得到一个object的问题,这是因为当前客户端发送的数据需要转为bytes数组才能使用

4.我们获取数据的时候是bytes数据,所以需要编程str类型的数据才能使用:str(bytes,encoding="")

5.发送数据的时候也需要将需要的字符转换成bytes:bytes(str,encoding="")

6.不使用连接就关闭close,其中需要异常处理

3.创建一个clientSocket用于连接serverSocket

1.客户端需要使用socket.connect(address)方式连接指定地址的socket

# 使用python中的网络编程
import socket
import time

# 创建一个tcp/ip协议的套接字
clientSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 创建一个udp/ip的套接字
# udpSocket=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
host = "localhost"
port = 8888
buffer_size = 1024
address = (host, port)
# 开始连接服务器地址
clientSocket.connect(address)

if clientSocket is None:
    print("无法连接当前的服务器!")
else:
    print("已经连接服务器---> oK")
    while True:
        data = input("发送数据到服务器:(exit/quit退出)")
        if data.lower() == "exit" or data.lower() == "quit":
            clientSocket.send(bytes("EXIT", encoding="utf8"))
            # 关闭当前的客户端
            clientSocket.close()
            break

        clientSocket.send(bytes(data, encoding="utf8"))
        # 接收服务器发送的数据
        data = clientSocket.recv(buffer_size)
        # 打印接收的数据
        print("接收服务器的数据为:{0}".format(str(data, encoding="utf8")))

4.结果

在这里插入图片描述
在这里插入图片描述

5.总结

1.使用socket的时候,需要打开连接或者接收连接,发送数据的时候只能是bytes

2.数据需要加码和解码才能使用

3.任何的socket都需要关闭

以上纯属个人见解,如有问题请联系本人!

发布了215 篇原创文章 · 获赞 39 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_45492007/article/details/103214077
今日推荐