我有一个想法,我正在尝试将数据从Netduino上传到Azure VM中托管的SQL数据库。在与WCF挣扎之后,我刚刚在C#中编写了一个简单的应用程序,通过套接字(下面的代码)处理请求,并在我的机器/ LAN上完成工作。因为我还不太了解
Azure VM,如何以客户端应用程序成功到达服务器部分的方式向外界公开IP /端口? 目前,我无法让Azure VM收听外部世界。我创建了一个端点(名称,TCP协议,相同的公共和私有端口,并检查'启用直接服务器返回'。要尝试它,我关闭防火墙并尝试从外部,无济于事。
该端口上的侦听器是否可以被视为安全解决方案?
为了简单起见,我想到了套接字,但这真的是一个好主意吗?你们会做些不同的事情并且仍然保持简单吗?
...
Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPEndPoint localEndPoint = new IPEndPoint(IPAddress.Any, 3211);
server.Bind(localEndPoint);
server.Listen(Int32.MaxValue);
while (true)
{
Socket clientSocket = server.Accept();
new ProcessClientRequest(clientSocket);
}
...
public ProcessClientRequest(Socket clientSocket)
{
m_clientSocket = clientSocket;
new Thread(ProcessRequest).Start();
}
private void ProcessRequest()
{
const Int32 c_microsecondsPerSecond = 1000000;
using (m_clientSocket)
{
Byte[] buffer = new Byte[1024];
string lastRead;
if (m_clientSocket.Poll(5 * c_microsecondsPerSecond, SelectMode.SelectRead))
{
if (m_clientSocket.Available == 0)
return;
Int32 bytesRead = m_clientSocket.Receive(buffer, m_clientSocket.Available, SocketFlags.None);
// Return a key to the client.
lastRead = WriteDataToDB(System.Text.Encoding.UTF8.GetString(buffer).Replace("\0", string.Empty));
m_clientSocket.Send(Encoding.UTF8.GetBytes(lastRead));
}
}
}
答案 0 :(得分:0)
您是否在https://manage.windowsazure.com/上检查了VM的端点设置?添加规则应允许任何人连接到<vm-dns-name>.cloudapp.net:<public-port>
。
这是DNS名称,而不是VM名称。我的Meteor应用程序不需要直接服务器返回功能。
足够硬的哈希和加密层应该足够安全,前提是客户知道您的公钥fingerprint,因为Certificate Authorities can be compromised。