# برنامه نویسی با محصولات مایکروسافت > برنامه نویسی مبتنی بر Microsoft .Net Framework > WCF , Web Services , .Net Remoting >  chat

## saeid.yavary

یک محیط چت دارم دارای دو برنامه جدا یکی server یکی client ارتباط این دو تا با tcp برقرار شده هر دو تا هم فرستنده اند هم گیرنده .
وقتی server برای client اطلاعات می فرستد ادرس ip و ادرس پورت خودش را هم می فرستد طرف client برای دریافت باید کلید recive را بزند تا این اطلاعات را دریافت کند.(ابتدا یک پنجره باز می شه که ادرس ip و ادرس پورت فرستنده را نشان می دهد)می خوام بدون زدن کلید recive اطلاعات نمایش داده بشه.

----------


## yavari

سلام

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

موفق باشید

----------


## saeid.yavary

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

سلام

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

موفق باشید

----------


## saeid.yavary

سلام
نمی دونم چطوری وقتی client پیام ارسال می کنه در richtextbox  دیگری اطلاعات اتومات ظاهر می شه لطفاً کمک کنید

----------


## saeid.yavary

سلام 
کسی نمی تونه کمک کنه

----------


## amirsajjadi

https://barnamenevis.org/showpo...51&postcount=1

----------


## yavari

> سلام
> نمی دونم چطوری وقتی client پیام ارسال می کنه در richtextbox  دیگری اطلاعات اتومات ظاهر می شه لطفاً کمک کنید


سلام

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

موفق باشید

----------


## saeid.yavary

مثال خوبی بود ولی من server و client در یک کامپیوتر است.اگه مثال در این مورد دارید برام بفرستید.

----------


## yavari

سلام

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

موفق باشید.

----------


## saeid.yavary

سلام
مشکل ارسال و دریافت حل شد. حالا مشکلم اینه که هر دفعه ارسال می کنم روی یک پورت جدید ارسال انجام می شه یعنی برای هر بار ارسال اول 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

----------


## حامد مصافی

از پورت های آزاد (برای مثال بین 5000 تا 7000) استفاده کنید.

----------

