PDA

View Full Version : سوال: مشکل متصل نشدن دو سوکت



m2011kh
شنبه 29 آبان 1395, 21:33 عصر
سلام و خسته نباشید دوستان.

من بار اولی هست که بوسیله C#‎‎‎‎ دو سیستم رو به وسیله سوکت متصل کنم.برنامه ی سمت سرور و کلاینت رو روی کنسول نوشتم. روی IP داخلی (127.0.0.1) کامل کار میکنه. ولی روی ایپی اینترنتی و داخل شبکه کار نمیکنه. در واقع روی تنها ایپی که جواب داد ایپی (127.0.0.1) بود.

سورس رو هم ضمیمه کردم لطفا اگه میشه یک بررسی بکنید.

موفق و سربلند باشید.

silsin
شنبه 29 آبان 1395, 22:21 عصر
فکر کنم زبانش لهستانیه نه ؟ :لبخند:
خب ! با اینکه سر و ته نداشت ولی متوجه شدم چی به چیه
الان مشکل شبکه داخلیه چیه ؟ ارور میده چی کار می کنه که میگی نمیشه ؟

دلتنگ اسمان
شنبه 29 آبان 1395, 22:24 عصر
سلام
این لینک (http://barnamenevis.org/showthread.php?397507-%D8%AE%D8%B7%D8%A7-%D9%87%D9%86%DA%AF%D8%A7%D9%85-%D8%A7%D8%B1%D8%B3%D8%A7%D9%84-%D9%81%D8%A7%DB%8C%D9%84-%D9%87%D8%A7%DB%8C-%D8%A8%D8%B2%D8%B1%DA%AF-%D8%AF%D8%B1-%D8%B4%D8%A8%DA%A9%D9%87&highlight=%D8%A7%D8%B1%D8%B3%D8%A7%D9%84+%D8%AF%D8 %B1%DB%8C%D8%A7%D9%81%D8%AA+%D9%81%D8%A7%DB%8C%D9% 84)رو ببین دوتا فایل گذاشتن (یکی سمت سرور و دیگری کلاینت) که توی شبکه فایل ارسال میشه. با IP دلخواه.

m2011kh
شنبه 29 آبان 1395, 22:38 عصر
فکر کنم زبانش لهستانیه نه ؟ :لبخند:
خب ! با اینکه سر و ته نداشت ولی متوجه شدم چی به چیه
الان مشکل شبکه داخلیه چیه ؟ ارور میده چی کار می کنه که میگی نمیشه ؟

سلام دوست عزیز.

نخیر زبانش لهستانی نیست زبان آلمانی هستش و اینکه سورس نوشته خودمه. دوم اینکه پست اول رو اگه مطالعه بفرمایید نوشتم که مشکل چیه.

موفق و سربلند باشید.

silsin
شنبه 29 آبان 1395, 22:44 عصر
سلام دوست عزیز.

نخیر زبانش لهستانی نیست زبان آلمانی هستش و اینکه سورس نوشته خودمه. دوم اینکه پست اول رو اگه مطالعه بفرمایید نوشتم که مشکل چیه.

موفق و سربلند باشید.



ولی روی ایپی اینترنتی و داخل شبکه کار نمیکنه. در واقع روی تنها ایپی که جواب داد ایپی (127.0.0.1) بود.

دوست عزیز , فکر کنم اینجا قوانینی در مورد این مدل پست ها هست که فرد سوال کننده باید مشکلش رو کامل توضیح بده تا بتونه جواب بگیره ! فکر نمی کنم به پست شما با این توضیحات بشه جواب داد
شما هم موفق باشید

m2011kh
شنبه 29 آبان 1395, 22:53 عصر
سلام
این لینک (http://barnamenevis.org/showthread.php?397507-%D8%AE%D8%B7%D8%A7-%D9%87%D9%86%DA%AF%D8%A7%D9%85-%D8%A7%D8%B1%D8%B3%D8%A7%D9%84-%D9%81%D8%A7%DB%8C%D9%84-%D9%87%D8%A7%DB%8C-%D8%A8%D8%B2%D8%B1%DA%AF-%D8%AF%D8%B1-%D8%B4%D8%A8%DA%A9%D9%87&highlight=%D8%A7%D8%B1%D8%B3%D8%A7%D9%84+%D8%AF%D8 %B1%DB%8C%D8%A7%D9%81%D8%AA+%D9%81%D8%A7%DB%8C%D9% 84)رو ببین دوتا فایل گذاشتن (یکی سمت سرور و دیگری کلاینت) که توی شبکه فایل ارسال میشه. با IP دلخواه.

دوست عزیز اون لینک و سورس های داخلش رو بررسی کردم.
اصلا از کلاس Socket استفاده نکرده بود و اون سورس هم با IPLocal( البته اصلا کار نکرد، اگر کار بکنه) کار میکنه. و اینکه کد این سورسی که فرستادید روی کتابخانه .net 2010 به پایین نوشته شده.

من خودم میدونم که کدم درست هست و فقط یک اصلاح یا اصلاحات ریزی نیاز داره فقط میخوام که اگه کسی میتونه لطفا فقط سورس رو بررسی کنه و اون نکات ریز رو بهم بگه.

موفق و سربلند باشید.

m2011kh
شنبه 29 آبان 1395, 22:56 عصر
دوست عزیز , فکر کنم اینجا قوانینی در مورد این مدل پست ها هست که فرد سوال کننده باید مشکلش رو کامل توضیح بده تا بتونه جواب بگیره ! فکر نمی کنم به پست شما با این توضیحات بشه جواب داد
شما هم موفق باشید

دوست عزیز من بیشتر از 5 سال عضو برنامه نویس هستم میدونم که قوانین چی هستن.
شما اگه به پست اول مراجعه بکنین میبینین که:



ولی روی ایپی اینترنتی و داخل شبکه کار نمیکنه.

این کاملا روشنه.یعنی اگه ایپی ای بغیر از IPlocal سیستم بهش بدی متصل نمیشه. دیگه ازین روشن تر؟


موفق و سربلند باشید.

silsin
شنبه 29 آبان 1395, 23:19 عصر
لطفا حذف بشه

m2011kh
یک شنبه 30 آبان 1395, 01:57 صبح
در کل پورتی که مورد استفاده قرار میدم رو باز گذاشتم و از فایر وال خاصی به جز فایروال ویندوز هم استفاده نمیکنم. روی فایر وال ویندوز هم سرور و کلاینت رو آزاد گذاشتم که از هر پورتی که مشغول نیست استفاده کنن.

البته میتونه مشکل از روتر باشه و متأسفانه به فایروال روتر دسترسی ندارم بخاطر اینکه از اینترنتی به عنوان کاربر Hotspot استفاده میکنم و من صاحب روتر نیستم و به نمیتونم به تنظیمات اصلی روتر دسترسی داشته باشم.

ولی در کل در مورد شبکه اطلاعاتم کامل نیست. دوستان آیا نظری دارن؟ مشکل از کجا میتونه باشه؟ روی سوستم خودم یا ایپی 127.0.0.1 و ایپی داخلی شبکه تست کردم با هر دو جواب داد ولی با ایپی اینترنتی سیستم جواب نداد.

روی دو سیستم مختلف با هیچ ایپی ای جواب نداد.

منتظر راهنمایی های دوستان هستم.

موفق و سربلند باشید.

silsin
یک شنبه 30 آبان 1395, 09:41 صبح
در کل پورتی که مورد استفاده قرار میدم رو باز گذاشتم و از فایر وال خاصی به جز فایروال ویندوز هم استفاده نمیکنم. روی فایر وال ویندوز هم سرور و کلاینت رو آزاد گذاشتم که از هر پورتی که مشغول نیست استفاده کنن.

البته میتونه مشکل از روتر باشه و متأسفانه به فایروال روتر دسترسی ندارم بخاطر اینکه از اینترنتی به عنوان کاربر Hotspot استفاده میکنم و من صاحب روتر نیستم و به نمیتونم به تنظیمات اصلی روتر دسترسی داشته باشم.

ولی در کل در مورد شبکه اطلاعاتم کامل نیست. دوستان آیا نظری دارن؟ مشکل از کجا میتونه باشه؟ روی سوستم خودم یا ایپی 127.0.0.1 و ایپی داخلی شبکه تست کردم با هر دو جواب داد ولی با ایپی اینترنتی سیستم جواب نداد.

روی دو سیستم مختلف با هیچ ایپی ای جواب نداد.

منتظر راهنمایی های دوستان هستم.

موفق و سربلند باشید.
ساده ترین راه برای مطمئن شدن از صحت قضیه اینه که ارتباط بین کلاینت رو سرور رو تست کنید که اولا مشخص بشه ایا مشکل از جای دیگه است یا خیر
یه نمونه از تست می تونه استفاده از telnet باشه
راه دیگه ای که پیشنهاد میشه اینه که یه تست ساده انجام بشه مثلا به عنوان یک برنامه کلاینت سروری :


سرور

public void StartServer(AddressFamily family,SocketType Stype)
{
//Lookup Empty Error's
if (string.IsNullOrEmpty(ip))
{
throw new Exception("Empty Host Error");
}
if(Port == 0)
{
throw new Exception("Empty Port Error");
}


//init Socket
mSocket = new Socket(family, Stype,ProtocolType.Tcp);
mSocket.Bind(new IPEndPoint(IPAddress.Parse(ip), Port));
// mSocket.SetSocketOption(SocketOptionLevel.Tcp, SocketOptionName.MaxConnections, GetMaxConnection());
mSocket.Listen(-1);
mSocket.BeginAccept(Server_BeginAccept, mSocket);


}

void Server_BeginAccept(IAsyncResult Result)
{


var Temp = (Socket)Result.AsyncState;
Socket RecivedTemp = null;


new Thread(() =>
{


RecivedTemp = Temp.EndAccept(Result);


if (RecivedTemp != null) {
UserList.Add(new User() { Name = "Guest", IpAddress = IPAddress.Parse(((IPEndPoint)RecivedTemp.RemoteEnd Point).Address.ToString()).ToString(), Id = 0, IsMe = false, ProtocolType = "vp6" });
}


}).Start();



mSocket.BeginAccept(Server_BeginAccept, mSocket);

// Virtual_Client = Server.EndAccept(Result);
// Recived = new Byte[Byte.MaxValue];
// Virtual_Client.BeginReceive(Recived, 0, Recived.Length, SocketFlags.None, Server_BeginRecived, null);




}
و کلاینت


public void ConnectTest()
{
Socket mTest = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
mTest.Connect(new IPEndPoint(IPAddress.Parse(ip), Port));

}




این یه ارتباط ساده رو با یه روش دیگه تو برنامه نویسی سوکت بین کلاینت و سرور می تونه برقرار کنه

silsin
یک شنبه 30 آبان 1395, 09:43 صبح
این خط فقط اضافه است توش
if (RecivedTemp != null) {
UserList.Add(new User() { Name = "Guest", IpAddress = IPAddress.Parse(((IPEndPoint)RecivedTemp.RemoteEnd Point).Address.ToString()).ToString(), Id = 0, IsMe = false, ProtocolType = "vp6" });
}
همچنین
mSocket.BeginAccept(Server_BeginAccept, mSocket);

هم به خاطر اینکه بتونه دائما کانکشن بگیره استفاده شده
ip و port هم دو متغییر ادرس دهی برای ارتباط هستن

m2011kh
یک شنبه 30 آبان 1395, 15:15 عصر
این خط فقط اضافه است توش
if (RecivedTemp != null) {
UserList.Add(new User() { Name = "Guest", IpAddress = IPAddress.Parse(((IPEndPoint)RecivedTemp.RemoteEnd Point).Address.ToString()).ToString(), Id = 0, IsMe = false, ProtocolType = "vp6" });
}
همچنین
mSocket.BeginAccept(Server_BeginAccept, mSocket);

هم به خاطر اینکه بتونه دائما کانکشن بگیره استفاده شده
ip و port هم دو متغییر ادرس دهی برای ارتباط هستن

شما فکر کنم اصلا پست های بالا رو مطالعه نمیکنید کلا.


من خودم میدونم که کدم درست هست و فقط یک اصلاح یا اصلاحات ریزی نیاز داره فقط میخوام که اگه کسی میتونه لطفا فقط سورس رو بررسی کنه و اون نکات ریز رو بهم بگه.

سورسی که خودم نوشتم کاملا کار میکنه و اتصال رو برقرار میکنه و با اینکه مشکلات کوچیک و ریزی داره ولی تا 10 کلاینت رو اتصال برقرار میکنه و پیام هارو منتقل میکنه. تنها مشکل:



ولی در کل در مورد شبکه اطلاعاتم کامل نیست. دوستان آیا نظری دارن؟ مشکل از کجا میتونه باشه؟ روی سیستم خودم یا ایپی 127.0.0.1 و ایپی داخلی شبکه تست کردم با هر دو جواب داد ولی با ایپی اینترنتی سیستم جواب نداد.

لطفا قبل از ارسال پست، پست های قبلی رو مطالعه کنید.

silsin
یک شنبه 30 آبان 1395, 15:55 عصر
شما فکر کنم اصلا پست های بالا رو مطالعه نمیکنید کلا.


سورسی که خودم نوشتم کاملا کار میکنه و اتصال رو برقرار میکنه و با اینکه مشکلات کوچیک و ریزی داره ولی تا 10 کلاینت رو اتصال برقرار میکنه و پیام هارو منتقل میکنه. تنها مشکل:



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


این یه ارتباط ساده رو با یه روش دیگه تو برنامه نویسی سوکت بین کلاینت و سرور می تونه برقرار کنه
فکر کنم فرق تست مشخص بااشه با چیزهای دیگه


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

m2011kh
یک شنبه 30 آبان 1395, 16:23 عصر
والا اگه جایی مثل stack owerflow بود تا حالا صد دفعه کسی که تاپیک رو ساخته بود رو بن می کردن به خاطر این مدل سوال کردن

فکر کنم منظورتون Stack Overflow باشه :) (نه O(w)er).

دوست عزیز اگه به علت نامفهومی سوال و یا فقر علمی شما نمیتونید به سوال پاسخ بدید چرا اسپم میکنید؟


تشریح دوباره ی سوال:

سورس تست شده و کار میکنه. منتهای اگه سرور و کلاینت هر دو رو روی سیستم خودم اجرا کنم. اگه سرور و کلاینت روی دو سیستم جدا باشند اتصال برقرار نمیشه.


با آرزوی موفقیت و سربلندی.