📄 remoteserver.cs
字号:
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.IO;
using System.Threading;
namespace TcpListenerSample
{
// FireEventArgs: a custom event inherited from EventArgs.
public class RemoteServerEventArgs: EventArgs
{
public string message;
public int bytes;
public RemoteServerEventArgs(string message, int bytes)
{
this.message = message;
this.bytes = bytes;
}
} //end of class RemoteServerEventArgs
/// <summary>
/// Summary description for RemoteServer.
/// </summary>
public class RemoteServer
{
private string m_Message = "";
private int m_serverPort;
private string m_sendMessageText = "";
public RemoteServer(int serverPort)
{
m_serverPort = serverPort;
}
public delegate void EventDelegate(object from, RemoteServerEventArgs args);
public event EventDelegate myEvent;
public void issueEvent(RemoteServerEventArgs args)
{
myEvent(this, args);
}
public void SendMessage(string message)
{
m_sendMessageText = message;
Thread thread = new Thread(new ThreadStart(SendMessageThread));
thread.Start();
}
private void SendMessageThread()
{
String response;
try
{
// listen on port m_serverPort
TcpListener tcpServer = new TcpListener(m_serverPort);
// report where we are
IPHostEntry thisHost = Dns.Resolve(Dns.GetHostName());
ShowMessage(String.Format("Host {0} listening on {1}, port {2}",
thisHost.HostName, thisHost.AddressList[0].ToString(), m_serverPort));
tcpServer.Start();
while(true)
{
// Accept will block until someone connects
m_Message = "Waiting for connection...";
ShowMessage(m_Message);
TcpClient clientConn = tcpServer.AcceptTcpClient();
// Send back a message
response = m_sendMessageText;
// Convert the string to a Byte Array and send it
Byte[] byteResponse =
Encoding.ASCII.GetBytes(response.ToCharArray());
clientConn.GetStream().Write(byteResponse, 0, byteResponse.Length);
Stream strm = clientConn.GetStream();
// Read the stream and convert it to ASCII
Byte[] inputBuffer = new Byte[128];
int bytes = strm.Read(inputBuffer, 0, inputBuffer.Length);
string responsetest =
Encoding.ASCII.GetString(inputBuffer, 0, bytes);
// Display the data
m_Message = String.Format("Received {0} bytes", bytes);
ShowMessage(m_Message);
m_Message = String.Format("Message received: \"{0}\"", responsetest);
ShowMessage(m_Message);
clientConn.Close();
}
}
catch (SocketException socketError)
{
if (socketError.ErrorCode == 10048)
{
ShowMessage("Error, port in use");
}
}
}
private void ShowMessage(string message)
{
RemoteServerEventArgs args = new RemoteServerEventArgs(message, message.Length);
issueEvent(args);
}
/// <summary>
/// Gets or sets the port of the TCP server to connect to.
/// </summary>
public int ServerPort
{
get
{
return m_serverPort;
}
set
{
m_serverPort = value;
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -