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都需要关闭
以上纯属个人见解,如有问题请联系本人!