Python 最近,我试图建立一个客户端和服务器来发送和接收消息,但我被卡住了
我只是想用一个客户端和服务器建立一个基本的聊天。当我运行这两个程序时,它们都给了我相同的错误。此错误是client1.py的错误Python 最近,我试图建立一个客户端和服务器来发送和接收消息,但我被卡住了,python,python-3.x,sockets,Python,Python 3.x,Sockets,我只是想用一个客户端和服务器建立一个基本的聊天。当我运行这两个程序时,它们都给了我相同的错误。此错误是client1.py的错误 Traceback (most recent call last): File "C:/Users/Abishek/AppData/Roaming/JetBrains/PyCharmCE2020.2/scratches/client1.py", line 1, in <module> from socket import s
Traceback (most recent call last):
File "C:/Users/Abishek/AppData/Roaming/JetBrains/PyCharmCE2020.2/scratches/client1.py", line 1, in <module>
from socket import socket, AF_INET, SOCK_STREAM
File "C:\Users\Abishek\AppData\Roaming\JetBrains\PyCharmCE2020.2\scratches\socket.py", line 64, in <module>
IntEnum._convert_(
File "C:\Python37\Lib\enum.py", line 349, in __getattr__
raise AttributeError(name) from None
AttributeError: _convert_
而chatserver.py是:
from socket import AF_INET,SOCK_STREAM, socket
import threading
SERVER = socket.gethostbyname(socket.gethostname())
port = 4444
sock = socket.socket(AF_INET,SOCK_STREAM)
format = 'utf-8'
buffer_size = 128
ADDR = (SERVER,port)
Disconnect_msg = 'Disconnected'
def connection(SERVER,port):
sock.bind(ADDR)
run = True
try:
sock.connect(ADDR)
print('Connection successful')
except Exception as err:
print('Error connecting to client :'+str(err))
run = False
def receiving_data(conn, addr):
connected = True
while connected:
recv_msg = conn.recv(buffer_size).decode(format)
if recv_msg:
print(f"[MESSAGE RECEIVED FROM {conn} {addr}] : {recv_msg}")
if Disconnect_msg in recv_msg:
print(f"[CLIENT {conn} { addr} Disconnected]")
connected= False
if __name__ == '__main__':
sock.bind(ADDR)
sock.listen(5)
print(f'Server ip; {SERVER}')
print('Waiting for connection...')
conn , addr = sock.accept()
accpt_conn = threading.Thread(target=connection, args=ADDR)
recv_data = threading.Thread(target=receiving_data, args =(conn,addr))
recv_data.start()
accpt_conn.start()
recv_data.join()
accpt_conn.join()
sock.close()
你能帮我一下我做错了什么吗。
我使用Pycharm作为我的IDE,我使用的是Windows10
谢谢大家…您是否尝试在powershell中直接运行它?
回溯(上次调用):文件“chatserver.py”,第4行,在SERVER=socket.gethostbyname(socket.gethostname())AttributeError:type object“socket”没有属性“gethostbyname”
但是client1.py运行了,但服务器没有。当我在命令提示符中运行时,请记住套接字是unix的东西,并不是所有东西都能在windows中工作,我有点惊讶它能在windows中工作。我认为是pycharm造成了问题,非常感谢。在powershell中运行看起来相当不错。所以它现在应该可以工作了,很高兴你让它运行起来了。祝你好运您是否尝试直接在powershell中运行它?回溯(最近一次调用):文件“chatserver.py”,第4行,在SERVER=socket.gethostbyname(socket.gethostname())AttributeError:类型对象“socket”没有属性“gethostbyname”
,但client1.py运行了,但服务器没有。当我在命令提示符中运行时,请记住套接字是unix的东西,并不是所有东西都能在windows中工作,我有点惊讶它能在windows中工作。我认为是pycharm造成了问题,非常感谢。在powershell中运行看起来相当不错。所以它现在应该可以工作了,很高兴你让它运行起来了。祝你好运
from socket import socket, AF_INET, SOCK_STREAM
import threading
FORMAT = 'utf-8'
server =input('Enter server ip :')
port = 8080
DISCONNECT_MSG = 'break' or 'disconnect'
sock = socket(AF_INET,SOCK_STREAM)
def connection(server,port):
try:
sock.connect((server, port))
print("Connection successful")
except Exception as err:
print('Connection failed :' +str(err))
def send_msg(client_name):
connected = True
while connected:
message = input('>>> ')
msg = message.encode(FORMAT)
client_info_with_msg = f'[{client_name}: {message}]'
sock.send(client_info_with_msg.encode())
if message == DISCONNECT_MSG:
print(f'{client_name} DISCONNECTED!!')
connected = False
def recv_msg():
run = True
while run:
recv_message = sock.recv(512)
message = recv_message.decode('utf-8')
if message == DISCONNECT_MSG:
run = False
print(f'{message}')
def main(server,port):
connection(server, port)
client_name = input("Enter your name: ")
thread1 = threading.Thread(target=send_msg, args=client_name)
thread1.start()
thread2 = threading.Thread(target=recv_msg, args=None)
thread2.start()
thread1.join()
thread2.join()
sock.close()
main(server,port)
from socket import AF_INET,SOCK_STREAM, socket
import threading
SERVER = socket.gethostbyname(socket.gethostname())
port = 4444
sock = socket.socket(AF_INET,SOCK_STREAM)
format = 'utf-8'
buffer_size = 128
ADDR = (SERVER,port)
Disconnect_msg = 'Disconnected'
def connection(SERVER,port):
sock.bind(ADDR)
run = True
try:
sock.connect(ADDR)
print('Connection successful')
except Exception as err:
print('Error connecting to client :'+str(err))
run = False
def receiving_data(conn, addr):
connected = True
while connected:
recv_msg = conn.recv(buffer_size).decode(format)
if recv_msg:
print(f"[MESSAGE RECEIVED FROM {conn} {addr}] : {recv_msg}")
if Disconnect_msg in recv_msg:
print(f"[CLIENT {conn} { addr} Disconnected]")
connected= False
if __name__ == '__main__':
sock.bind(ADDR)
sock.listen(5)
print(f'Server ip; {SERVER}')
print('Waiting for connection...')
conn , addr = sock.accept()
accpt_conn = threading.Thread(target=connection, args=ADDR)
recv_data = threading.Thread(target=receiving_data, args =(conn,addr))
recv_data.start()
accpt_conn.start()
recv_data.join()
accpt_conn.join()
sock.close()