PDA

View Full Version : مشکل در برنامه تحت شبکه



seven7777777
جمعه 05 تیر 1388, 12:01 عصر
با سلام خدمت همه اساتید سایت و دوستان گلم

من تازه کتاب TCP/IP Sockets In C# رو گیر آوردم . تو مثال دومش به یه مشکل بر خوردم .
این متن مثال :


string Server = Servertb.Text;
byte[] Buffer = Encoding.ASCII.GetBytes("It's a Test Message !!!");
int Port = int.Parse(Porttb.Text);
TcpClient Client = null;
NetworkStream Stream = null;
try
{
Client = new TcpClient(Server, Port);
listBox1.Items.Add("Connect To Server ...");
Stream = Client.GetStream();
Stream.Write(Buffer, 0, Buffer.Length);
listBox1.Items.Add(Encoding.ASCII.GetString(Buffer ));
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "ERROR");
}
finally
{
//Stream.Close();
//Client.Close();
}

در خط
Client = new TcpClient(Server, Port); خطا میده . خطا هم نمی دونم ماله IP هست یا PORT .
اگه IP رو 127.0.0.1 بزنم که خطای زیر رو میده :
http://barnamenevis.org/forum/attachment.php?attachmentid=32352&stc=1&d=1105303999

احتمال دادم IP مشکل داشته باشه . با دستور netstat گشتم یه IP با PORT باز پیدا کردم بازم یه خطای دیگه داد .
مشخصات سیستم من :
VISTA Home Edition
NOD32 AntiVirus
Active Windows Firewall

راستی تو فایروال ویندوز یه پورت رو استثنا کردم ولی بازم جواب نگرفتم .البته نمی تونم تو NOD هم فایروال یا یه همچین چیزی فعال هست یا نه ؟؟؟

seven7777777
جمعه 05 تیر 1388, 16:23 عصر
یعنی کسی شبکه کار نکرده یا کسی این خطا رو تا حالا ندیده یا خیلی خطای ساده ای هست که کسی جواب نمیده .

در هر حال هم اکنون نیازمند یاری سبزتان هستیم .

seniamail
جمعه 05 تیر 1388, 16:46 عصر
سلام
این یه برنامه چت در یک شبکه است که جواب هم داده. امیدوارم بتونه کمکت کنه.
البته قبل از استفاده از IP خاصی اون رو در داس Ping کن

seven7777777
جمعه 05 تیر 1388, 22:34 عصر
دوست خوبم ممنون که جواب دادی .

البته سیستم من یک لپ تاپ تک هست و در هیچ شبکه ای نیست لذا می خواستم با دادن IP خودش یه جوری شبه شبکه رو ایجاد کنم .
اگه با این کار نمیشه چه جوری یه برنامه شبکه رو تست می کنن ؟
چه راه هایی داره ؟
برنامه رو هم می بینم و نتیجشو می گم .

seniamail
جمعه 05 تیر 1388, 23:19 عصر
البته من با ویستا هیچ برنامه تحت شبکه ای رو تست نکردم
برنامه بالا رو در XP با استفاده از آی پی 127.0.0.1 تست کردم
البته یه برنامه چت با VB6 نوشته بودم که بین دو کامپیوتر در شبکه هم جواب داد ولی حتما باید Firewall غیر فعال باشه

esmaeily-hosein
شنبه 06 تیر 1388, 10:23 صبح
وقتی تو یه Connection به یه port توی یک Ip خاص میزنی بایستی یک برنامه یه سرویسی و... تو کامپیوتر میزبان رو اون پورت listen کرده باشه تا connection تو موفقیت آمیز بشه . این اساس پروتکل Tcp هست .
به همین دلیل به اون میگن connection oriented

moferferi
شنبه 06 تیر 1388, 11:44 صبح
سلام.
میشه بگی این کتاب فارسی یه انگلیسی نویسندش کیه و از کجا گیر اوردی؟

Sajjad.Aghapour
شنبه 06 تیر 1388, 12:24 عصر
میشه کدهای سرور رو هم بذارید.کدهای کلاینت که خطایی توش دیده نمیشه....
البته بیشتر به خاطر همون firewall هست.node هم فکر می کنم تاثیر داشته باشه.من روی سیستمم avira که نصب هست مشکلی برام پیش نیومده تا حالا.....


سلام.
میشه بگی این کتاب فارسی یه انگلیسی نویسندش کیه و از کجا گیر اوردی؟
TCP/IP Sockets in C# که اون رو می تونید از سایت FlazX.Com (http://flazx.com)بگیرید...

NewFoxStudent
شنبه 06 تیر 1388, 13:58 عصر
خطا میده . خطا هم نمی دونم ماله IP هست یا PORT .
اگه IP رو 127.0.0.1 بزنم که خطای زیر رو میده :
http://barnamenevis.org/forum/attachment.php?attachmentid=32352&stc=1&d=1105303999
این خطا بخاطر اینه که برنامه ارسال کنند اطلاعات به IP و Port که اطلاعات روی اون ارسال میشه دسترسی نداره و بهمین دلیل برنامه دریافت کننده اطلاعات رو نمیگیره و این خطا رو برمگردونه.


البته نمی تونم تو NOD هم فایروال یا یه همچین چیزی فعال هست یا نه ؟؟؟ دوست عزیز خطا دقیقا به خاطر فایروال نود32 هست ، توی نود یه قسمتی هست که تمام پورت ها رو بلاک میکنه باید اون رو غیر فعالش کنید


البته سیستم من یک لپ تاپ تک هست و در هیچ شبکه ای نیست لذا می خواستم با دادن IP خودش یه جوری شبه شبکه رو ایجاد کنم .
اگه با این کار نمیشه چه جوری یه برنامه شبکه رو تست می کنن ؟شما میتونید روی یک کامپیوتر دوتا فایل exe که یکیشون نقش کلاینت داره و اون یکی نقش سرور رو اجرا کنید و دقیقا مانند دوتا کامپیوتر که با هم ارتباط tcp دارن باهاشون رفتار کنید

seven7777777
شنبه 06 تیر 1388, 22:26 عصر
اولا از همه اساتید ممنونم که جواب دادند .


البته من با ویستا هیچ برنامه تحت شبکه ای رو تست نکردم
برنامه بالا رو در XP با استفاده از آی پی 127.0.0.1 تست کردم
تو ویستا هم جواب داد .


وقتی تو یه Connection به یه port توی یک Ip خاص میزنی بایستی یک برنامه یه سرویسی و... تو کامپیوتر میزبان رو اون پورت listen کرده باشه

شما میتونید روی یک کامپیوتر دوتا فایل exe که یکیشون نقش کلاینت داره و اون یکی نقش سرور رو اجرا کنید و دقیقا مانند دوتا کامپیوتر که با هم ارتباط tcp دارن باهاشون رفتار کنید
توی اون مثال خود برنامه کلاینت رو که تنها اجرا می کرد باز هم خروجی داشت یعنی نیازی نبود که برنامه سروری هم باشه . ( البته شاید من اشتباه می کنم ولی بعد از مثال کلاینت برنامه رو اجرا کرده و خروجی گرفته بود . )


خطا دقیقا به خاطر فایروال نود32 هست ، توی نود یه قسمتی هست که تمام پورت ها رو بلاک میکنه باید اون رو غیر فعالش کنید
شما می دونید تو کدوم قسمتشه ؟؟؟

esmaeily-hosein
یک شنبه 07 تیر 1388, 09:13 صبح
اگر برنامه Server نداره احتمال زیاد میخواد به یه Port از قبل تعریف شده وصل بشه مثل Http یا telnet که هر کدوم Port های خاصه خودشونو دارند .
البته بازم برنامه بالا ناقصه چون نحوه ارتباط با اونها هم قواعد خاصه خودشونو داره در غیر این صورت برنامه بالا هیچ وقت به تو خروجی نخواهد داد .

aliprf
یک شنبه 07 تیر 1388, 12:03 عصر
هر برنامه کلاینت باید دارای یک سرور باشد.زمانی که سرور وجود نداشته باشهبا این error مواجه می شیم
کد سرور رو براتون میزارم

class Server_Class
{
private int port;
public Server_Class(int p)
{
port = p;
}
public string listen()
{
string ret_data = "";
Socket handlerSocket;
TcpListener tcpListener = new TcpListener(IPAddress.Any, port);
tcpListener.Start();
while (true)
{
handlerSocket = tcpListener.AcceptSocket();
if (handlerSocket.Connected)
{
NetworkStream networkStream = new NetworkStream(handlerSocket);
Byte[] dataByte = new Byte[1024];
networkStream.Read(dataByte, 0, dataByte.Length);
ret_data= Encoding.ASCII.GetString(dataByte);
handlerSocket = null;
}
}
return ret_data;
}
}
هر دو برنامه کلاینت و سرور باید روی یک پورت کار کنند و با هم اجرا شوند.

NewFoxStudent
یک شنبه 07 تیر 1388, 14:34 عصر
من توی نود البته ویندوز XP اینطوری این کار رو انجام میدم
32446

alimooghashang
شنبه 10 بهمن 1388, 19:29 عصر
ببخشید یه سوال
میشه Buffer رو به صورت byte نفرستیم؟
نمیشه همون string فرستاد؟

mir555
شنبه 10 بهمن 1388, 19:39 عصر
ممکنه علتش این باشه که برنامه ات توی ویستا با دسترسی پایین اجرا شده بهتره رو فایل اجراییت راست کلیک کنی و run as administrator بزنی در ضمن پورتی که تو این سورس به عنوان کلاینت در نظر گرفتی باید تو tcp سرور باز شده باشه و همیشه اول سرور اجرا شده باشه بعدش کلاینت