PDA

View Full Version : سوال: ذخیره آی پی کلاینت در برنامه تحت شبکه



shgroup
یک شنبه 14 تیر 1388, 15:25 عصر
سلام دوستان
من تو برنامم که تحت شبکه کار می کنه می خوام وقتی کاربر در کلاینتها user & pass ورودش رو در صفحه اول وارد کرد تا وارد برنامه بشه زمانی که وارد شد username اون که خودم می دونم چه طوری و IP سیستمی که با اون وارد برنامه شده رو ذخیره کنم
مشکلم اینه که نمی دونم باید چه طوری IP اش رو بگیرم ! فقط می دونم باید از کلاس Sockets استفاده کنم.
کسی می تونه تو این زمینه کمکم کنه ؟
ممنون میشم

Sajjad.Aghapour
یک شنبه 14 تیر 1388, 19:49 عصر
socket.RemoteEndPoint
tcpClient.Client.RemoteEndPoint
udpClient.Client.RemoteEndPoint

shgroup
دوشنبه 15 تیر 1388, 13:02 عصر
socket.RemoteEndPoint
tcpClient.Client.RemoteEndPoint
udpClient.Client.RemoteEndPoint


دوست عزیز می شه یه مقداری بیشتر توضیح بدی
من چک کردم اصلا تو کلاس TcpClient متد Client نواریم !
اگه امکان داره یه مقداری بیشتر توضیح بدی ممنون می شم.

Sajjad.Aghapour
دوشنبه 15 تیر 1388, 13:15 عصر
//listener is TcpListener
TcpClient tcpClient=listener.AcceptTcpClient();

//now work with tcpclient properties

tcpClient.Client.RemoteEndPoint;

shgroup
دوشنبه 15 تیر 1388, 14:31 عصر
//listener is TcpListener
TcpClient tcpClient=listener.AcceptTcpClient();

//now work with tcpclient properties

tcpClient.Client.RemoteEndPoint;


دست گلت درد نکنه عزیز
اگه تو این زمینه ها کتاب یا Ebook ای دارید معرفی کنید
مرسی

shgroup
سه شنبه 16 تیر 1388, 15:44 عصر
دوستان من هنوز مشکلم بر طرف نشده نمی دونم باید چه طوری این کارو انجام بدم اگه کسی sample تو این زمنه داره لطف کنده بذاره ممنون می شم.

sajjadlove عزیز فکر کنم شما تو این زمینهبیشتر کار کرده باشی اگه می شه یک کمکی کن خیلی گیرم
مرسی

shgroup
سه شنبه 16 تیر 1388, 22:45 عصر
من یه سری کد البته Console App پیدا کردم اما نمی دونم چرا جواب نمیده فکر کنم باید یه داده ای از طرف کلاینت برای سرور ارسال بشه تا IP اش به دست بیاد . درست می گم ؟
اگه درسته چه طوری ؟
اینم کد :


using System;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Text;

class MainClass
{
public static void Main()
{
string data;
IPEndPoint ip = new IPEndPoint(IPAddress.Any, 9999);

Socket socket = new Socket(AddressFamily.InterNetwork,SocketType.Strea m, ProtocolType.Tcp);

socket.Bind(ip);
socket.Listen(10);

Socket client = socket.Accept();
IPEndPoint newclient = (IPEndPoint)client.RemoteEndPoint;
Console.WriteLine("Connected with {0} at port {1}",newclient.Address, newclient.Port);


}
}

دوستان خواهشا کمک کنید به شدت نیاز دارم :افسرده:

Sajjad.Aghapour
سه شنبه 16 تیر 1388, 23:59 عصر
مشکلتون چیه؟
همین کدها رو همراه با کلاینت برات میذارم ببین کار میکنه یا نه؟



//Server

static void Main(string[] args)
{

IPEndPoint ip = new IPEndPoint(IPAddress.Any, 500);
Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

s.Bind(ip);
s.Listen(10);

Socket client = s.Accept();

Console.WriteLine(client.RemoteEndPoint);

Console.ReadLine();

}

//Client

static void Main(string[] args)
{
IPAddress ip = IPAddress.Parse("127.0.0.1");
TcpClient client = new TcpClient();

client.Connect(ip, 500);

NetworkStream ns = client.GetStream();
byte[] data = Encoding.ASCII.GetBytes("hello");

ns.Write(data, 0, data.Length);
}

shgroup
چهارشنبه 17 تیر 1388, 00:47 صبح
با این کد اگر برنامه کلاینت و سرور رو در یک سیستم اجرا کنیم جواب میده اما تو شبکه با دو کامپیوتر جواب نمیده ! :ناراحت:

arashmidos2020
دوشنبه 05 مرداد 1388, 21:06 عصر
یعنی چی که باید کلاینت سرور باشه.من می خوام یک برنامه کلاینت سرور بنویسم که تمام کلاینت ها اول سرور رو بشناسن.سرور تنها ویژگی که داره اینه که مثلا یک فلگ روی آ« یک است.
لطفا راهنمایی کنید این برنامه چطور بنویسم؟
ممنون

obscure
دوشنبه 05 مرداد 1388, 22:50 عصر
باید از کلاس IPEndPoint استفاده کنی.
اینم مثالش در console application :
کلاینت:

using System; // For String, Int32, Console, ArgumentException
using System.Text; // For Encoding
using System.IO; // For IOException
using System.Net.Sockets; // For Socket, SocketException
using System.Net; // For IPAddress, IPEndPoint

class TcpEchoClientSocket {

static void Main(string[] args) {



String server = "127.0.0.1"; // Server name or IP address

// Convert input String to bytes
byte[] byteBuffer = Encoding.ASCII.GetBytes("salam");

// Use port argument if supplied, otherwise default to 7
int servPort = 7;

Socket sock = null;

try {
// Create a TCP socket instance
sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream,
ProtocolType.Tcp);

// Creates server IPEndPoint instance. We assume Resolve returns at least one address
IPEndPoint serverEndPoint = new IPEndPoint(Dns.Resolve(server).AddressList[0],
servPort);

// Connect the socket to server on specified port
sock.Connect(serverEndPoint);
Console.WriteLine("Connected to server... sending echo string");

// Send the encoded string to the server
sock.Send(byteBuffer, 0, byteBuffer.Length, SocketFlags.None);

Console.WriteLine("Sent {0} bytes to server...", byteBuffer.Length);

int totalBytesRcvd = 0; // Total bytes received so far
int bytesRcvd = 0; // Bytes received in last read

// Receive the same string back from the server
while (totalBytesRcvd < byteBuffer.Length) {
if ((bytesRcvd = sock.Receive(byteBuffer, totalBytesRcvd,
byteBuffer.Length - totalBytesRcvd, SocketFlags.None)) == 0) {
Console.WriteLine("Connection closed prematurely.");
break;
}
totalBytesRcvd += bytesRcvd;
}

Console.WriteLine("Received {0} bytes from server: {1}", totalBytesRcvd,
Encoding.ASCII.GetString(byteBuffer, 0, totalBytesRcvd));

} catch (Exception e) {
Console.WriteLine(e.Message);
} finally {
sock.Close();
}
}
}

سرور:

using System; // For Console, Int32, ArgumentException, Environment
using System.Net; // For IPAddress
using System.Net.Sockets; // For TcpListener, TcpClient

class TcpEchoServerSocket {

private const int BUFSIZE = 32; // Size of receive buffer
private const int BACKLOG = 5; // Outstanding connection queue max size

static void Main(string[] args) {

int servPort = 7;

Socket server = null;

try {
// Create a socket to accept client connections
server = new Socket(AddressFamily.InterNetwork, SocketType.Stream,
ProtocolType.Tcp);

server.Bind(new IPEndPoint(IPAddress.Any, servPort));

server.Listen(BACKLOG);
} catch (SocketException se) {
Console.WriteLine(se.ErrorCode + ": " + se.Message);
Environment.Exit(se.ErrorCode);
}

byte[] rcvBuffer = new byte[BUFSIZE]; // Receive buffer
int bytesRcvd; // Received byte count

for (;;) { // Run forever, accepting and servicing connections

Socket client = null;

try {
client = server.Accept(); // Get client connection

Console.Write("Handling client at " + client.RemoteEndPoint + " - ");

// Receive until client closes connection, indicated by 0 return value
int totalBytesEchoed = 0;
while ((bytesRcvd = client.Receive(rcvBuffer, 0, rcvBuffer.Length,
SocketFlags.None)) > 0) {
client.Send(rcvBuffer, 0, bytesRcvd, SocketFlags.None);
totalBytesEchoed += bytesRcvd;
}
Console.WriteLine("echoed {0} bytes.", totalBytesEchoed);

client.Close(); // Close the socket. We are done with this client!

} catch (Exception e) {
Console.WriteLine(e.Message);
client.Close();
}
}
}
}