大家好,我成功地用C#编写了一个客户端服务器程序,可以在局域网下完美地工作,我们使用了TcpListener和TcpSocket类.
但是,我们无法使其通过互联网工作,我知道这与防火墙,路由器端口阻塞等有关.
我们转发了我们使用的端口,并关闭了防火墙,但仍然没有运气.
为了使这项工作有效,我必须做些什么?像要使用的某个端口一样可以正常工作吗?怎么说“ Msn Messenger”呢?
服务器代码:
private static TcpListener serverTcpListener;
public static bool Run()
{
// Initialize new thread for client communications
Thread listenThread = new Thread(new ThreadStart(ListenForClients));
// Initialize TCP listener and attempt to start
ServerTcpListener = new TcpListener(IPAddress.Any, 3000);
try
{
ServerTcpListener.Start();
}
catch (SocketException)
{
return false;
}
// Start client communications thread
listenThread.Start();
return true;
}
public static void ListenForClients()
{
while (true)
{
TcpClient client = ServerTcpListener.AcceptTcpClient();
Thread clientThread = new Thread(new ParameterizedThreadStart(HandleClientComm));
clientThread.Start(client);
}
}
客户代码:
private TcpClient myClient;
private NetworkStream clientStream;
public InitializeResult Initialize()
{
IPEndPoint serverEndPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 3000);
try
{
MyClient.Connect(serverEndPoint);
}
catch (SocketException)
{
return InitializeResult.AccessError;
}
catch (ArgumentNullException)
{
return InitializeResult.NullRemote;
}
try
{
ClientStream = MyClient.GetStream();
}
catch (Exception)
{
return InitializeResult.StreamFail;
}
if (!Authenticate())
{
return InitializeResult.AuthenticateFail;
}
return InitializeResult.Success;
}
解决方法:
您可能会遇到以下一些常见问题:
服务器
> Windows防火墙.
>这是有关如何允许程序通过防火墙的教程:http://windows.microsoft.com/en-US/windows7/Allow-a-program-to-communicate-through-Windows-Firewall
>路由器上的端口转发.
> http://portforward.com/是一个很好的资源,我相信您可以选择您的路由器,它会为您提供相关步骤.您将需要选择托管服务器的计算机的LAN IP地址以及要尝试连接的端口(在您的情况下为3000).
客户
对于客户端,它应该可以正常连接,但是您必须指定外部IP地址,而不是服务器的LAN IP地址.您可以通过在托管服务器的计算机上转到http://whatismyip.com来找到它.
–
Msn和类似的聊天程序使用这种简单的客户端/服务器方法-非常容易完成. Skype是一个非常有趣的聊天程序.它使用P2P系统,而不是客户端服务器.如果您有兴趣(作为学生),它可以使用Nat Hole Punching来实现,我建议您对其进行研究以扩展您的网络知识.
标签:sockets,c 来源: https://codeday.me/bug/20191127/2075165.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。