मैं एक साधारण सॉकेट-आधारित चैट प्रोग्राम लिख रहा हूं जो सर्वर को क्लाइंट को संदेश भेजने और प्राप्त करने की अनुमति देता है। ग्राहक सर्वर को संदेश भेज सकता है लेकिन जब मैं सर्वर से संदेश भेजने का प्रयास करता हूं, तो यह कहता है कि 'फ़ाइल' ऑब्जेक्ट्स में 'recv' विशेषता है।सॉकेट-आधारित सरल पायथन चैट प्रोग्राम
Server.py
import socket
import os
import select
import sys
def prompt():
sys.stdout.write('<You> ')
sys.stdout.flush()
try:
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
except:
print 'Failed to create socket'
sys.exit()
PORT = 9050
HOST = '127.0.0.1'
RECV_BUFFER = 4096
server_socket.bind((HOST, PORT))
server_socket.listen(10)
input = [server_socket, sys.stdin]
print 'Chat Program'
prompt()
while 1:
inputready, outputready, exceptready = select.select(input,[],[])
for sock in inputready:
if sock == server_socket:
client, address = server_socket.accept()
input.append(client)
#data = sock.recv(RECV_BUFFER)
#if data:
#sys.stdout.write(data)
else:
data = sock.recv(RECV_BUFFER)
if data:
sys.stdout.write(data)
else:
msg = sys.stdin.readline()
server_socket.send('\r<Server>: ' + msg)
prompt()
server_socket.close()
Client.py
import socket
import os
import select
import sys
def prompt():
sys.stdout.write('<You> ')
sys.stdout.flush()
HOST = '127.0.0.1'
PORT = 9050
try:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
except socket.error:
print 'Failed to create socket'
sys.exit()
s.connect((HOST, PORT))
print 'Connected to remote host. Start sending messages'
prompt()
while 1:
socket_list = [sys.stdin, s]
read_sockets, write_sockets, error_sockets = select.select(socket_list, [], [])
for sock in read_sockets:
if sock == s:
data = sock.recv(4096)
if not data:
print '\nDisconnected from chat server'
sys.exit()
else:
sys.stdout.write(data)
prompt()
else:
msg = sys.stdin.readline()
s.send('\r<Client>: ' + msg)
prompt()
इसका कारण यह है कि यह एक सर्वर है सहकर्मी सहकर्मी नहीं है – ioanD