在我利用python中的socket在服务器和客户端之间通信后,服务器没有反应,也没有报错,但是,客户端报错:
Traceback (most recent call last):
File "C:\Users\浪矢秀一\Desktop\客户端.py", line 5, in
s.connect(("127.0.0.1",8888))
ConnectionRefusedError: [WinError 10061] 由于目标计算机积极拒绝,无法连接。
尽管实现运行服务器,但是客户端还是报错。
请问,有没有人知道怎么办?
注:
客户端程序:
import socket
s= socket.socket()
s.connect(("127.0.0.1",8888))
while True:
print(s.recv(1024))
s.close()
服务器程序:
# -*- coding: utf-8 -*-
# 该机器服务器 IP:127.0.0.1
import socket
import time
def main():
s = socket.socket()
s.bind(("127.0.0.1",8081)) # 绑定地址和端口
#Symbolic name meaning all available interfaces
s.listen(5) # 等待客户端连接,连接数为参数
while(True):
c,addr = s.accept() # 建立客户端连接
print("与"+str(addr)+"建立了连接")
index = 0
while(index<10):
now_time = time.strftime("%Y/%m/%d %H:%M:%S",time.localtime())
c.send(now_time)
time.sleep(1)
index = index + 1
c.close()
if __name__ == "__main__":
main()
如果有人能回答此问题,并成功实现,我将成为他/她的粉丝!
参考GPT和自己的思路:
根据你提供的客户端和服务端程序,我发现你在客户端程序中连接的地址和端口号与服务端程序中绑定的地址和端口号不一致。客户端连接的地址和端口号应该与服务端程序中绑定的地址和端口号一致。将客户端程序中的地址和端口号修改为下面的代码即可与服务端建立连接:
s.connect(("127.0.0.1",8081))
此外,在服务端程序中,你发送的数据应该是字符串类型,而需要发送字节类型,可以将发送的内容使用encode()
方法进行编码:
c.send(now_time.encode())
最后,注意服务端程序中需要加入异常处理,以避免在程序出现异常时无法关闭与客户端的连接。完整的服务端程序代码如下:
# -*- coding: utf-8 -*-
# 该机器服务器 IP:127.0.0.1
import socket
import time
def main():
s = socket.socket()
s.bind(("127.0.0.1", 8081)) # 绑定地址和端口
s.listen(5) # 等待客户端连接,连接数为参数
while True:
try:
c, addr = s.accept() # 建立客户端连接
print("与{}建立了连接".format(str(addr)))
index = 0
while index < 10:
now_time = time.strftime("%Y/%m/%d %H:%M:%S", time.localtime())
c.send(now_time.encode()) # 发送字节类型的数据
time.sleep(1)
index += 1
c.close()
except Exception as e:
print(e)
break
if __name__ == "__main__":
main()
希望我的回答能够解决你的问题,祝你学习愉快!
参考GPT和自己的思路:
根据你提供的信息,你的客户端程序和服务器程序都有问题。客户端程序在连接时提示无法连接到目标计算机,这通常意味着服务器程序没有正确启动或者绑定了错误的IP地址和端口号。另外,服务器程序也有一些小问题,例如在发送时间字符串时应该先将其转换为字节类型再发送。以下是修改后的程序:
客户端程序:
import socket
s= socket.socket()
s.connect(("127.0.0.1",8081))
while True:
print(s.recv(1024))
s.close()
服务器程序:
import socket
import time
def main():
s = socket.socket()
s.bind(("127.0.0.1",8081))
s.listen(5)
while True:
c,addr = s.accept()
print("与"+str(addr)+"建立了连接")
index = 0
while index < 10:
now_time = time.strftime("%Y/%m/%d %H:%M:%S",time.localtime())
c.send(now_time.encode('utf-8'))
time.sleep(1)
index = index + 1
c.close()
if __name__ == "__main__":
main()
请注意,客户端程序现在连接的是端口8081(对应服务器程序中的端口号),而非8888。另外,服务器程序中发送数据时需要先将时间字符串转换为字节类型再发送,使用encode()函数即可实现。