PDA

View Full Version : chat



saeid.yavary
پنج شنبه 18 بهمن 1386, 09:03 صبح
یک محیط چت دارم دارای دو برنامه جدا یکی server یکی client ارتباط این دو تا با tcp برقرار شده هر دو تا هم فرستنده اند هم گیرنده .
وقتی server برای client اطلاعات می فرستد ادرس ip و ادرس پورت خودش را هم می فرستد طرف client برای دریافت باید کلید recive را بزند تا این اطلاعات را دریافت کند.(ابتدا یک پنجره باز می شه که ادرس ip و ادرس پورت فرستنده را نشان می دهد)می خوام بدون زدن کلید recive اطلاعات نمایش داده بشه.

yavari
پنج شنبه 18 بهمن 1386, 09:45 صبح
سلام

از چه کلاسی برا کارتون استفاده کردین ؟ نت ، سوکت ، ریموتینگ ؟؟؟
در هر حال روال کار اینجوریه که کلاینتها URL سرور (البته اگه از ریموتینگ استفاده می کنید می تونید از http هم استفاده کنید ) رو دارن و در ابتدای کار یه کانال ارتباطی ایجاد میشه که تا پایان ارتباط وجود داره و با ارسال پیام یه ایونتی به صورت ریموت صدا زده میشه و اطلاعات رو ارسال میکنه .
در هر حال اگه میتونید قسمتی از سورستون رو بذارید تا روال کارتون مشخص شه .

موفق باشید

saeid.yavary
پنج شنبه 18 بهمن 1386, 09:51 صبح
PrivateSub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) HandlesMyBase.Load
Try
listensocket = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
lip = IPAddress.Parse("127.0.0.1")
lep = New IPEndPoint(lip, 1200)
Me.listensocket.Bind(lep)
Me.listensocket.Listen(2)
Catch ex As Exception
MessageBox.Show(ex.Message, "serverTCP", MessageBoxButtons.OK, MessageBoxIcon.Error)
EndTry
EndSub
PrivateSub btn_send_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_send.Click
Try
clients = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
lip = IPAddress.Parse("127.0.0.1")
lep = New IPEndPoint(lip, 1100)
clients.Connect(lep)
buf = System.Text.Encoding.ASCII.GetBytes(TextBox1.Text)
clients.Send(buf)
clients.Close()
Catch ex As Exception
MessageBox.Show(ex.Message, "serverTCP", MessageBoxButtons.OK, MessageBoxIcon.Error)
EndTry
EndSub
PrivateSub btn_accept_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_accept.Click
Try
rs = listensocket.Accept()
MsgBox(rs.RemoteEndPoint.ToString)
rs.Receive(buf)
Label1.Text = System.Text.Encoding.ASCII.GetString(buf)
rs.Close()
Catch ex As Exception
EndTry
EndSub

yavari
پنج شنبه 18 بهمن 1386, 10:35 صبح
سلام

دوست عزیز ، شما که از سوکت استفاده کردید نمونه کار دوستمون آقای مصافی خیلی میتونه کمکتون کنه !
http://blackdal.blogfa.com/post-13.aspx

موفق باشید

saeid.yavary
پنج شنبه 18 بهمن 1386, 16:02 عصر
سلام
نمی دونم چطوری وقتی client پیام ارسال می کنه در richtextbox دیگری اطلاعات اتومات ظاهر می شه لطفاً کمک کنید

saeid.yavary
پنج شنبه 18 بهمن 1386, 18:02 عصر
سلام
کسی نمی تونه کمک کنه

amirsajjadi
پنج شنبه 18 بهمن 1386, 18:25 عصر
http://barnamenevis.org/forum/showpost.php?p=423051&postcount=1

yavari
پنج شنبه 18 بهمن 1386, 21:44 عصر
سلام
نمی دونم چطوری وقتی client پیام ارسال می کنه در richtextbox دیگری اطلاعات اتومات ظاهر می شه لطفاً کمک کنید

سلام

یعنی اون سمپل کمکتون نکرد :متعجب:
والا من با سوکت کار نکردم با ریموتینگ خواسته باشید میتونم توضیحاتی بدم :خجالت:

موفق باشید

saeid.yavary
جمعه 19 بهمن 1386, 09:28 صبح
مثال خوبی بود ولی من server و client در یک کامپیوتر است.اگه مثال در این مورد دارید برام بفرستید.

yavari
جمعه 19 بهمن 1386, 20:58 عصر
سلام

دوست عزیز اون برنامه تحت لوکال جواب میده !
کافیه آی پی سرور رو رو لوکال ست کنید .

موفق باشید.

saeid.yavary
شنبه 20 بهمن 1386, 10:09 صبح
سلام
مشکل ارسال و دریافت حل شد. حالا مشکلم اینه که هر دفعه ارسال می کنم روی یک پورت جدید ارسال انجام می شه یعنی برای هر بار ارسال اول connect ایجاد می شه. می خوام همون اول پورت رو مشخص کنم بعد ارسال و دریافتم رو روی اون پورت انجام بدم.
کسی می تونه کمکم کنه.
امیدوارم منظورم رو رسونده باشم.
این کد send



PrivateSub btn_send_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_send.Click
Try
msg = System.Text.Encoding.ASCII.GetBytes(TextBox1.Text)
Connect1.BeginSend(msg, 0, msg.Length, SocketFlags.None, New AsyncCallback(AddressOf OnSend), DBNull.Value)
Catch ex As Exception
MessageBox.Show(ex.Message, "clientTCP", MessageBoxButtons.OK, MessageBoxIcon.Error)
EndTry



این کد connect



PrivateSub btn_con_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_con.Click
Try
Connect1 = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
lip = IPAddress.Parse("127.0.0.1")
lep = New IPEndPoint(lip, 1200)
Connect1.Connect(lep)
'btn_con.Visible = False
Catch ex As Exception
EndTry
EndSub

حامد مصافی
دوشنبه 22 بهمن 1386, 20:07 عصر
از پورت های آزاد (برای مثال بین 5000 تا 7000) استفاده کنید.