PDA

View Full Version : socket exeption



arashmidos2020
چهارشنبه 28 مرداد 1388, 12:45 عصر
از کلاس سرور و کلانیت دوتا شی می سازم و بعد اجراشون می کن.اما این مشکل رو می ده:
Specified argument was out of the range of valid values.

سلام.من نمی دونم اینو چکار کنم.لطفا کمک کنید


private int _port;
private string _IPserver="";
public int _Port
{
get
{
return _port;
}
set
{
_port = value;
}
}

public string _ipServer
{
get
{
return _IPserver;
}
set
{
_IPserver = value;
}
}
public void Connect()
{
Thread th = new Thread(new ThreadStart(StartConnect));
th.Start();
Console.WriteLine("Server IP : {0}", _ipServer);
}

public void StartConnect()
{
string msg = "I am client";
string msg2 = "";
byte[] byteData = new byte[1000];
byteData = Encoding.UTF8.GetBytes(msg);
byte[] byteDataRec = new byte[1000];

// a client to Connect to server
EndPoint IPe=new IPEndPoint(IPAddress.Parse("127.0.0.1"),_port);

//IPEndPoint IPe=new IPEndPoint(IPAddress.Parse(_IPserver),_port);
try
{
Socket listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
listener.Connect(IPe);
//_IPserver = ((IPEndPoint)listener.RemoteEndPoint).Address.ToSt ring();
//listener.Shutdown(SocketShutdown.Both);
if (listener.Connected)
{
listener.Receive(byteDataRec);
msg2 = Encoding.UTF8.GetString(byteDataRec);
if (msg2 == "I am server")
{
listener.Send(byteData);
}
}
}
catch (SocketException e)
{
Console.WriteLine("error in winsocket: {0}", e.Message);
}
}

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


public class ConnectToClient
{
public ArrayList _NodeInfo=new ArrayList();

private int _port;
public int _Port
{
get
{
return _port;
}
set
{
_port = value;
}
}
public void Connect()
{
Thread th = new Thread(new ThreadStart(StartListening));
th.Start();
//string IPClient = (string)_NodeInfo[0];
//Console.WriteLine("Server IP : {0}", IPClient);
}
public void StartListening()
{
string msg = "I am server";
string msg2="";
byte[] byteDataRec = new byte[1000];
byte[] byteData = new byte[1000];
byteData = Encoding.UTF8.GetBytes(msg);
string IPclient;
int i = 0;
//IPEndPoint IPe=new IPEndPoint(IPAddress.Any,_port);

IPEndPoint IPe = new IPEndPoint(IPAddress.Parse("127.0.0.1"), _port);

Socket[] Client = new Socket[100];

Socket listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
listener.Bind(IPe);
listener.Listen(1000);
while (true)
{
Client[i] = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

Client[i] = listener.Accept();

IPclient = ((IPEndPoint)Client[i].RemoteEndPoint).Address.ToString();

i++;
if (listener.Connected)
{
listener.Send(byteData);
listener.Receive(byteDataRec);
msg2 = Encoding.UTF8.GetString(byteDataRec);

if (msg2=="I am clinet")
{
_NodeInfo.Add(IPclient);
}
}
}
}

arashmidos2020
چهارشنبه 28 مرداد 1388, 12:49 عصر
اصلا ببنید کد من درست هست یا نه ممنون

Sociant
چهارشنبه 28 مرداد 1388, 21:41 عصر
این خط تو قسمت سرور (اشتباهی نوشتین کلاینت منم نزدیک بود گمراه کنی:لبخندساده:) اضافیه


Client[i] = new Socket(AddressFamily.InterNetwork,SocketType.Strea m,ProtocolType.Tcp;


نباید با استفاده از listener ارسال و دریافت کنی ، باید با همونClient[i] این کار رو انجام بدین.
نکته مهم تر،_port رو مقدار دهی میکنید؟

arashmidos2020
چهارشنبه 28 مرداد 1388, 22:14 عصر
بله.پورتم مقدار دهی کردم.ولی بازم 1 خطای دیگه می گیره:
Only one usage of each socket address (protocol/network address/port) is normally permitted
آقا ممنون .

arashmidos2020
چهارشنبه 28 مرداد 1388, 23:21 عصر
کمک کنید لطفا

Sociant
چهارشنبه 28 مرداد 1388, 23:34 عصر
والا تا اونجا که سوادم قد میده این خطا مال وقتیه که پورت تعیین شده بوسیله شما در حال استفاده است. راستی اگه هر دوتا کد رو داری رو یه سیستم اجرا میکنی حتما باید شماره پورتاشون متفاوت باشه You know?

arashmidos2020
پنج شنبه 29 مرداد 1388, 13:07 عصر
شماره پورتشون هم متفاوت هست اما بازم جواب نمی ده.من حتی دوتا کد واسه خودم مثال زدم (رو یک سیستم ) دیدم جواب نمی ده و باز همون خطا رو میده.اگه ممنه یک نگاه بندازید
سمت سرور:


namespace testServer
{
class Server
{
public void Connect()
{
Start();
}
public void Start()
{
Socket listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPEndPoint IPe = new IPEndPoint(IPAddress.Any, 13001);
listener.Bind(IPe);
listener.Listen(100);
listener.Accept();
}
}
class Program
{
static void Main(string[] args)
{
Server ser = new Server();
ser.Connect();
}
}
}
و اینم کلاینت

namespace testClient
{
class Client
{
public void Connect()
{
Start();
}
private void Start()
{
Socket listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPEndPoint IPe = new IPEndPoint(IPAddress.Parse("192.168.1.1"), 14100);
listener.Connect(IPe);
}
}
class Program
{
static void Main(string[] args)
{
Client cl = new Client();
cl.Connect();
}
}
}

arashmidos2020
پنج شنبه 29 مرداد 1388, 16:10 عصر
آقا ممنون.کلا از کدی که در یک تاپیک دیگه گذاشته بودید استفاده کردم و درستش کردم.ولی کد بالا مشکلش حل نشد.

arashmidos2020
جمعه 30 مرداد 1388, 13:00 عصر
کسی نیست مشکل من رو حل کنه؟
واقعا چرا باید این کد مشکل داشته باشه.خطاش هم میگه که اصلا هیچ اتصالی بین کلاینت و سورور برقرار نیست.

arashmidos2020
جمعه 30 مرداد 1388, 13:34 عصر
والا تا اونجا که سوادم قد میده این خطا مال وقتیه که پورت تعیین شده بوسیله شما در حال استفاده است. راستی اگه هر دوتا کد رو داری رو یه سیستم اجرا میکنی حتما باید شماره پورتاشون متفاوت باشه You know?

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