PDA

نسخه کامل مشاهده نسخه کامل : سوکت نویسی یا برنامه نویسی تحت شبکه



ali.mjz
30-06-2015, 16:44
سلام . من برای پروژه درس شبکه یک مجبورم یه برنامه چت به زبان پایتون بنویسم که دو تا کلانت از طریق یک سرور
بتونن با همدیگه چت کنند ! خوشبختانه روی این زبان تمرین کردم و با سینتکس و قواعدش اشنام , از قبل هم سابقه برنامه نویسی
با خانواده سی رو دارم!
تونستم با کمی کمک از منابع خارجی سورس هایی رو بنویسم اما مشکل داره برنامه ی من هنوز !
اینه که دو تا کلاینت به یک سرور متصل میشن پیام به سرور میرسه اما سرور اون رو ارسال نمیکنه به کلاینت دیگه !
در پست های بعدی سورس هارو میزارم !
کلا تاپیکی رو پیدا نکردم که به طور تخصصی روی برنامه نویسی شبکه بحث کنه ! گفتم پس شاید زدن این تاپیک مفید باشه !
اگه هم کسی مایل باشه , اموزش اینکه چطور یک سوکت در پایتون یا سی شارپ بنویسیم هم میزارم !

ali.mjz
30-06-2015, 16:48
اینم سورس سرورم :



from socket import *
import sys
from builtins import bytes

host = '127.0.0.1'
host2= '127.0.0.1'
port = 1111
port2=1212

adr=(host,port)
adr2=(host2,port2)

class Serv:
def __init__(self):
self.serv = socket(AF_INET,SOCK_STREAM)
self.serv2=socket(AF_INET,SOCK_STREAM)
self.serv.bind((adr))
self.serv2.bind((adr2))
self.cli = None
self.cli2 = None
self.listeningloop = 0
self.processingloop = 0
self.run()
def run(self):
self.listeningloop = 1
while self.listeningloop:
self.listen()
self.processingloop = 1
while self.processingloop:
self.receivingmsg1()
self.sendingmsg1()
self.receivingmsg2()
self.sendingmsg2()
self.cli.close()
self.cli2.close()
self.serv.close()
self.serv2.close()

def listen(self):
self.serv.listen(5)
print( 'Listening for Client One on Port 1111 :')
cli,addr = self.serv.accept()
self.cli = cli
print ('Connected to ', addr)
self.serv2.listen(5)
print('Listening for Client Two on Port 1212 :')
cli2,addr2=self.serv2.accept()
self.cli2 = cli2
print('Connected to ' , addr2)

def sendingmsg1(self):
msg2=self.receivingmsg1()
self.serv2.sendto(bytes(msg2,'utf-8'),addr2)
def sendingmsg2(self):
msg3=self.receivingmsg2()
self.cli.sendto(bytes(msg3,'utf-8'),addr)

def receivingmsg1(self):
msg=self.cli.recv(4096).decode('utf-8')
print('client one :' , msg)
return msg

def receivingmsg2(self):
msgtwo=self.cli2.recv(4096).decode('utf-8')
print('Client two : ' , msgtwo)
return msgtwo


if __name__ == '__main__':
srv= Serv()

ali.mjz
30-06-2015, 16:50
اینم سورس یکی از کلاینت هام :



from socket import *
from time import time
from time import sleep
import sys
from builtins import bytes

class clients:
def __init__(self,host):
self.HOST=host
self.PORT=1111
self.ADDR=(self.HOST,self.PORT)
self.sck=None
def connecting(self):
self.sck=socket(AF_INET,SOCK_STREAM)
self.sck.connect(self.ADDR)
def sendmsg(self,msg):
self.sck.send(bytes(msg , 'utf-8'))
def rciving(self):
data=self.sck.recv(4096).decode('utf-8')
print('Server : ' , data)

if __name__ == '__main__':
print('Enter Host on port 1111 : ')
hst=input()
conn=clients(hst)
conn.connecting()
loop=1
while loop:
msg=input('Your Massage: ' )
if msg=='finish':
conn.sendmsg('Client Closed!')
conn.sck.close()
loop=0
else:
conn.sendmsg(msg)
conn.rciving()