Tôi đang làm việc trên một dự án máy chủ/khách hàng. Khách hàng sẽ yêu cầu máy chủ cung cấp thông tin và máy chủ sẽ gửi lại cho khách hàngC# gửi nhận đối tượng qua mạng?
Thông tin có thể là chuỗi, số, mảng, danh sách, danh sách hoặc bất kỳ đối tượng nào khác. Các giải pháp tôi tìm thấy cho đến nay là serialize các đối tượng (dữ liệu) và gửi nó sau đó de-serialize nó để xử lý.
Đây là mã máy chủ:
public void RunServer(string SrvIP,int SrvPort)
{
try
{
var ipAd = IPAddress.Parse(SrvIP);
/* Initializes the Listener */
if (ipAd != null)
{
var myList = new TcpListener(ipAd, SrvPort);
/* Start Listeneting at the specified port */
myList.Start();
Console.WriteLine("The server is running at port "+SrvPort+"...");
Console.WriteLine("The local End point is :" + myList.LocalEndpoint);
Console.WriteLine("Waiting for a connection.....");
while (true)
{
Socket s = myList.AcceptSocket();
Console.WriteLine("Connection accepted from " + s.RemoteEndPoint);
var b = new byte[100];
int k = s.Receive(b);
Console.WriteLine("Recieved...");
for (int i = 0; i < k; i++)
Console.Write(Convert.ToChar(b[i]));
string cmd = Encoding.ASCII.GetString(b);
if (cmd.Contains("CLOSE-CONNECTION"))
break;
var asen = new ASCIIEncoding();
// sending text
s.Send(asen.GetBytes("The string was received by the server."));
// the line bove to be modified to send serialized object?
Console.WriteLine("\nSent Acknowledgement");
s.Close();
Console.ReadLine();
}
/* clean up */
myList.Stop();
}
}
catch (Exception e)
{
Console.WriteLine("Error..... " + e.StackTrace);
}
}
đây là mã khách hàng mà sẽ trả về một đối tượng
public object runClient(string SrvIP, int SrvPort)
{
object obj = null;
try
{
var tcpclnt = new TcpClient();
Console.WriteLine("Connecting.....");
tcpclnt.Connect(SrvIP, SrvPort);
// use the ipaddress as in the server program
Console.WriteLine("Connected");
Console.Write("Enter the string to be transmitted : ");
var str = Console.ReadLine();
Stream stm = tcpclnt.GetStream();
var asen = new ASCIIEncoding();
if (str != null)
{
var ba = asen.GetBytes(str);
Console.WriteLine("Transmitting.....");
stm.Write(ba, 0, ba.Length);
}
var bb = new byte[2000];
var k = stm.Read(bb, 0, bb.Length);
string data = null;
for (var i = 0; i < k; i++)
Console.Write(Convert.ToChar(bb[i]));
//convert to object code ??????
Console.ReadLine();
tcpclnt.Close();
}
catch (Exception e)
{
Console.WriteLine("Error..... " + e.StackTrace);
}
return obj;
}
Tôi cần phải biết một serialize tốt/serialize và làm thế nào để tích hợp nó vào giải pháp trên.
Cảm ơn allot :-) Tôi là người mới đối với tất cả điều này Tôi không quan tâm đến cách nào để đạt được và tìm hiểu những gì tôi cần tất cả những gì tôi cần là giải pháp phục vụ/khách hàng giúp tôi gửi giá trị/đối tượng với máy chủ và nhận kết quả/trả lời từ máy chủ như gửi lệnh (chuỗi) "getProcesses" và máy chủ sẽ gửi lại mảng hoặc đối tượng (Process [] processlist = Process.GetProcesses();) cho khách hàng là khó khăn? cách tốt nhất để làm điều đó là gì? –
nhưng làm thế nào để sử dụng mã của bạn với mã của tôi? –
Tôi khuyên bạn nên đọc một trong các hướng dẫn "Bắt đầu với WCF" có sẵn như: http://msdn.microsoft.com/en-us/library/ms734712(VS.100).aspx http://weblogs.asp.net/ralfw/archive/2007/04/14/a-truely-simple-example-to-get-started-with-wcf.aspx http://msdn.microsoft.com/en-us /library/ms730144.aspx –