View Full Version : مشکل در TcpClient
nadia_1987
یک شنبه 27 تیر 1389, 15:34 عصر
یه مشکل دارم که هر جا گشتم و از هر کی پرسیدم جواب درستی ندادن .
مشکل اینه که یک برنامه client server با C# دارم می نویسم که سرور console هست و کلاینت هم windows form application.
توی کلاینت چندین فرم دارم که هر کدوم باید یه سری اطلاعات به سرور بفرستند و بگیرن ، توی هر کدوم مجبورم جداگانه tcpclient رو معرفی کنم .
TcpClient c = new TcpClient("localhost", 1000);
چون اگه معرفی نکنم این عبارت رو نمی شناسه
NetworkStream ns = c.GetStream();
از طرفی هر وقع معرفی می کنم دوباره توی سرور باید Accept کنم . که فکر نکنم این راهش باشه.
من میگم کلاینت من که فقط یک برنامه است با فرم های مختلف چرا باید برای هر کدوم جدا اینکار رو بکنم .
راهی نیست که بشه tcpclient رو یک بار فقط معرفی کرد و در تمام فرم ها از اون استفاده کرد ؟
ممنون می سم کمک کنید چون همه راه ها رو امتحان کردم . threading هم کار نمی کنه چون برای process های هم زمانه ، اما فرم های من هم زمان نیستند .
مرسی ، اگه لازم بود بگید یه sample کد ساده از سرور و کلاینت بذارم.
karim_medusa
یک شنبه 27 تیر 1389, 15:58 عصر
چرا از wcf استفاده نمی کنی .
سورس بزار ببینیم.
nadia_1987
یک شنبه 27 تیر 1389, 16:53 عصر
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
TcpListener l = new TcpListener(IPAddress.Any, 1000);
l.Start();
Console.WriteLine("Server has started.Waiting for clients...");
while (true)
{
TcpClient c = l.AcceptTcpClient();
Console.WriteLine(" >> Accept Connection From Clinet ");
NetworkStream ns = c.GetStream();
byte[] buf = new byte[200];
ns.Read(buf, 0, 100);
string st = System.Text.Encoding.ASCII.GetString(buf);
byte[] buf2;
if (string.Compare(name, "Administrator")==0)
{
string one = Convert.ToString(1);
buf2 = System.Text.Encoding.ASCII.GetBytes(Convert.ToStri ng(one));
ns.Write(buf2, 0, one.Length);
Console.WriteLine("this is admin");
}
// for form 2
TcpClient c2 = l.AcceptTcpClient();
Console.WriteLine(" >> Accept Connection From Clinet ");
NetworkStream ns2 = c2.GetStream();
byte[] stin = new byte[200];
ns2.Read(stin, 0, 100);
string stinfo = System.Text.Encoding.ASCII.GetString(stin);
Console.WriteLine(stinfo);
این برای سرور بود . حالا کد کلاینت . فرم اول :
namespace WindowsFormsApplication3
{
public partial class Form1 : Form
{
TcpClient c = new TcpClient("127.0.0.1", 1000);
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
NetworkStream ns = c.GetStream();
string st;
st = textBox1.Text;
byte[] buf = System.Text.Encoding.ASCII.GetBytes(st);
ns.Write(buf, 0, st.Length);
Form2 tempDialog = new Form2();
tempDialog.ShowDialog();
}
}
}
و اینم برای فرم دوم :
namespace WindowsFormsApplication3
{
public partial class Form2 : Form
{
TcpClient c2= new TcpClient("127.0.0.1", 1000);
public Form2()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
NetworkStream ns2 = c2.GetStream();
string st;
string st2;
st = textBox1.Text;
st2 = comboBox1.Text;
string name = string.Concat(st, st2);
byte[] buf2 = System.Text.Encoding.ASCII.GetBytes(name);
ns2.Write(buf2, 0, name.Length);
}
}
}
حقیقتش اینه که این برنامه رو برای پروژه نهایی می خوام و WCF تا حالا باهاش کار نکردم ، وقت ندارم برم دنبالش . می خوام با همین روش بنویسم .
ممنون می شم کمک کنید .
karim_medusa
یک شنبه 27 تیر 1389, 18:19 عصر
کد شما رو اصلاح کردم . ضمیمه رو دانلود کنید .
nadia_1987
یک شنبه 27 تیر 1389, 18:33 عصر
کد شما رو اصلاح کردم . ضمیمه رو دانلود کنید .
مرسی ، واقعا عالی بود . فقط یه سوال . من چون می خوام اینو برای یه پروژه دیگه بنویسم . می خواستم بدونم اون Common.cs چه نوع برنامه ای هست . من با class library نوشتم اما نتونستم توی add reference پیداش کنم ؟
ممنون می شم راهنمایی کنید .
karim_medusa
یک شنبه 27 تیر 1389, 19:12 عصر
یک کلاس خیلی ساده که یک عضو استاتیک داره همین.
همین فایل Common.cs رو کپی کنید. اسمش مهم نیست چی باشه فقط یک کلاس که عمومیه و عضوش استاتیک باشه همین.
nadia_1987
یک شنبه 27 تیر 1389, 19:21 عصر
یک کلاس خیلی ساده که یک عضو استاتیک داره همین.
همین فایل Common.cs رو کپی کنید. اسمش مهم نیست چی باشه فقط یک کلاس که عمومیه و عضوش استاتیک باشه همین.
خیلی ببخشید . اما متوجه نشدم . شما تو قسمت reference گذاشته بودید . اونجا که نمی تونم چیزی رو کپی و paste کنم .
چطوری از این فایل در یک برنامه دیگه استفاده کنم .
بازم ببخشید اگه سوالم خیلی ابتداییه.
vBulletin® v4.2.5, Copyright ©2000-1403, Jelsoft Enterprises Ltd.