TCP Socekts 및 C#을 사용하여 클라이언트 - 서버 응용 프로그램을 개발 중입니다. 콘솔 응용 프로그램에서 ASP 페이지로 메시지를 보내야합니다. OnLoad 이벤트를 사용하여 ASP 페이지에서 연결할 수 있고 때로는 PageLoad 이벤트에서 여러 메시지 만받을 수 있습니다. 나는 2 개의 질문이있다 : 1. 지속적으로 서버 소켓을 듣고 메시지를받는 방법?
2. ASP.NET 페이지가 (사용자가) 서버와의 연결을 끊을 때를 아는 방법은 무엇입니까?단일 ASP.NET 페이지에서 소켓을 청취하는 방법
서버 콘솔 응용 프로그램 :
static void StartServer()
{
serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPEndPoint ipEndPoint = new IPEndPoint(IPAddress.Any, 1000);
serverSocket.Bind(ipEndPoint);
serverSocket.Listen(4);
ConsoleKeyInfo cki;
XmlDocument doc = new XmlDocument();
doc.Load("test.xml");
serverSocket.BeginAccept(new AsyncCallback(OnAccept), null);
Console.WriteLine("Server started " + DateTime.Now + Environment.NewLine);
Console.WriteLine("Press S to start Data Sharing or ESC key to quit" + Environment.NewLine);
do
{
cki = Console.ReadKey();
if (cki.Key == ConsoleKey.S)
{
foreach (XmlNode node in doc.DocumentElement.ChildNodes)
{
try
{
_client = (ClientInfo)clientList[0];
if (((ClientInfo)clientList[0]).strName == node.Attributes["type"].InnerText)
{
SendRecord(node.Attributes["type"].InnerText + node.Attributes["value"].InnerText, (ClientInfo)clientList[0]);
clientList.Insert(clientList.Count, (ClientInfo)clientList[0]);
clientList.RemoveAt(0);
}
}
catch (Exception ex)
{
Console.WriteLine(ex.message);
}
}
Console.WriteLine("Data sharing finished " + DateTime.Now);
}
} while (cki.Key != ConsoleKey.Escape);
}
static void SendRecord(string _msg, ClientInfo client)
{
Data msgToSend = new Data();
msgToSend.cmdCommand = Command.Message;
msgToSend.strMessage = _msg;
byte[] byteData = msgToSend.ToByte();
try
{
client.socket.BeginSend(byteData, 0, byteData.Length, SocketFlags.None, new AsyncCallback(OnSend), _client);
Thread.Sleep(3);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
ASP.NET 클라이언트 측 :
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
Connect();
}
protected void Page_OnClose(object sender, EventArgs e)
{
Disconnect();
}
protected void updateEvent(object sender, EventArgs e)
{
if (msglist.Count > 0) lstRecords.Items.Add(msg);
lstRecords.Height = Unit.Percentage(100);
}
private void Connect()
{
Data msgToSend = new Data();
IPAddress ipAddress = IPAddress.Parse("127.0.0.1");
IPEndPoint ipEndPoint = new IPEndPoint(ipAddress, 1000);
clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
msgToSend.strType = strType;
msgToSend.strMessage = null;
msgToSend.cmdCommand = Command.List;
byteData = msgToSend.ToByte();
try
{
clientSocket.BeginConnect(ipEndPoint, new AsyncCallback(OnConnect), null);
clientSocket.BeginSend(byteData, 0, byteData.Length, SocketFlags.None, new AsyncCallback(OnSend), null);
byteData = new byte[1024];
clientSocket.BeginReceive(byteData, 0, byteData.Length, SocketFlags.None, new AsyncCallback(OnReceive), null);
}
catch (Exception ex)
{
lstRecords.Items.Add(ex.Message);
}
}
서버 응용 프로그램은 아무 문제없이 WinApp 및 ConsoleApp에 전송된다. 하지만 ASP 페이지에서는 올바르게 연결 메시지 만받을 수 있으며 때로는 1-2-3 메시지 만받을 수 있습니다. 나는 setInterval("__doPostBack('upDynamicClock', '');", 1000);
자바 스크립트를 사용하여 페이지를 새로 고침
지금까지 각면에서 개발 한 코드의 몇 가지 주요 점, 작동하는 것과 적용되지 않는 것의 몇 가지 예를 제공하십시오. – J0e3gan
사실, 서버 응용 프로그램은 문제없이 WinApp 및 ConsoleApp로 전송 중입니다. 하지만 ASP 페이지에서는 올바르게 연결 메시지 만받을 수 있으며 때로는 1-2-3 메시지 만받을 수 있습니다. setInterval ("__ doPostBack ('upDynamicClock', '');", 1000);을 사용하고 있습니다. 또한 새로 고침. 또한 OnClose 이벤트를 사용하여 닫기 페이지에서 연결 끊기 문제가 있습니다. –
ASP .NET 페이지 수명주기에는 여러 단계가 있습니다. 나는 데이터를 논쟁 적으로 수신하고 동시에 컨트롤을 업데이트하기 위해 어느 것을 사용해야하는지 혼란 스럽다. 아니면 불가능한가요? –