В моем классе .Net мы делаем простое приложение для чата. Наш профессор дал нам пример кода следующим образом:
СЕРВЕР:
TcpChannel channel = new TcpChannel(8085);
ChannelServices.RegisterChannel(channel);
RemotingConfiguration.RegisterWellKnownServiceType(typeof(RemoteObject), "myobject", WellKnownObjectMode.Singleton);
Console.ReadLine();
КЛИЕНТ:
TcpChannel channel = new TcpChannel();
ChannelServices.RegisterChannel(channel);
RemoteObject remoteObject = (RemoteObject)Activator.GetObject(typeof(RemoteObject), "tcp://localhost:8085/myobject");
remoteObject.PrintMessage("Hello world!");
Console.ReadLine();
УДАЛЕННЫЙ ОБЪЕКТ:
[Serializable]
public class RemoteObject : MarshalByRefObject
{
public void PrintMessage()
{
Console.Write("Hello World!");
Console.ReadLine();
}
}
С помощью этого кода он в основном печатает сообщение «Hello World» на экране консоли сервера каждый раз, когда запускается клиент. Однако мы не понимаем, как это работает, поскольку он не объяснил полностью, что делает каждая строка. Мы знаем только о каналах. Загвоздка в том, что с помощью этих кодов мы должны создать Windows-форму чата. Мы смогли заставить это приложение отправлять сообщение, предоставленное пользователем, но мы не можем понять, как мы можем сделать это в форме Windows, так как мы не понимаем исходный код.
Если кто-нибудь может помочь нам с некоторыми указателями и рекомендациями о том, как мы можем сделать это в форме Windows, сообщите нам об этом. Любой вклад приветствуется.
Если это каким-то образом поможет, приведенный ниже код — это то, что мы можем сделать на данный момент:
public partial class Form1 : Form
{
RemoteObject ro;
public Form1()
{
InitializeComponent();
TcpChannel serverChannel = new TcpChannel(8085);
ChannelServices.RegisterChannel(serverChannel, true);
RemotingConfiguration.RegisterWellKnownServiceType(typeof(RemoteObject), "myobject", WellKnownObjectMode.Singleton);
}
private void btnSend_Click(object sender, EventArgs e)
{
try
{
ro = (RemoteObject)Activator.GetObject(typeof(RemoteObject), "tcp://" + txtIpAddress.Text + ":8085/myobject");
ro.PrintMessage(txtMessage.Text);
txtChatArea.AppendText(System.Environment.MachineName + ": " + txtMessage.Text + "\n");
txtMessage.Clear();
}
catch (SystemException error)
{
MessageBox.Show("Error 101: " + error.Message, "Connection Failed", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
Приведенный выше код в основном запрашивает IP-адрес второй стороны (стороны, с которой вы общаетесь), а затем предоставляются два текстовых поля — одно для отображения разговора (многострочное), а другое — для приема сообщений. Этот код может отправить сообщение на сервер. Но тем не менее, он не может принимать входящие сообщения от других сторон.