remoting 映射外网后登录失败 由于连接方在一段时间后没有正确答复或连接的主机没有反应

wanggenhu0 2012-05-04 04:20:36
用的外网登录,IP地址是外网的:由于连接方在一段时间后没有正确答复或连接的主机没有反应 连接尝试失败 192.168.1.208:9999 显示成了内网的IP地址了,我用外网连的

客户端代码: private void frmLogin_Load(object sender, EventArgs e)
{
ChannelServices.RegisterChannel(new TcpClientChannel(), false);
}
frmmain.db = frmmain.network.GetMainObject(Dns.GetHostName(), Tusername.Text, Md5power.MD5Encrypt(Tuserpwd.Text), "IP" + getIpaddress() + "mac" + GetMacAddressByNetworkInformation() + waiwis); //这句用户验证可以通过,成功
if (frmmain.db != null)
{

DataTable DT = frmmain.db.customerver("version"); //运行到此处就会失败,
if (DT != null)
{


服务端主要代码: //启动服务
private void StartServer()
{
try
{
//创建注册服务器端对象供远程客户端引用
TCPIP = new TcpServerChannel(8208);
ChannelServices.RegisterChannel(TCPIP, false);

System.Runtime.Remoting.Lifetime.LifetimeServices.LeaseTime = TimeSpan.Zero;//设置租用管理器的初始租用时间为无限:

RemotingConfiguration.RegisterWellKnownServiceType(typeof(netbase),
"HT.NETDB", WellKnownObjectMode.SingleCall);
NETServer.ClientConnEvent += new NETServer.EventBase(ClientConnection);
this.启动服务ToolStripMenuItem.Enabled = false;
this.启动服务ToolStripMenuItem.Text = "已启动sql服务";
}
catch (Exception ex)
{
this.启动服务ToolStripMenuItem.Enabled = true;
MessageBox.Show("启动sql服务出现异常!"+ex.ToString(),"提示");
}
}

//客户端连接事件
private void ClientConnection(string username, string IP, string state)
{
listMsg.Items.Add("客户端IP:" + IP + " 用户:" + username + "已" + state);
if (state == "登录")
{
ListViewItem LvItem = new ListViewItem(IP);
LvItem.SubItems.Add(username);
listView1.Items.Add(LvItem);


if (listMsg.Items.Count > 80)
{
listMsg.Items.Clear();
}

if (this.listView1.Items.Count > 80)
{
listView1.Items.Clear();
}
}
else
{
for (int i = 0; i < listView1.Items.Count; i++)
{
if (listView1.Items[i].Text == IP)
{
listView1.Items.RemoveAt(i);
}
}
}
}
...全文
441 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
wanggenhu0 2013-08-28
  • 打赏
  • 举报
回复
我也是这样弄的,可我发现我的客户端用户数老是超过二十几个就不行了
wangfnso 2013-08-02
  • 打赏
  • 举报
回复
这个host文件怎么设置?我也遇到相同的问题
weiyifan2004 2013-06-18
  • 打赏
  • 举报
回复
我今天也遇到了这样的问题:我的解决方法是:直接在系统hosts文件中绑定计算机名字。比如我我服务器计算机名称为:“vnetop”,外网IP为“1.99.3.44”。那在服务器的HOSTS文件中如下写成: # # #这个在hosts文件中是注释符号 1.99.3.44 vnetop 然后客户端在调用远程的实例方法时就能得到正常的ID,而不提示错误了,另外提一下,这样绑定后,我的客户端在注册远程实例时,速度更快了。
小虎 2013-04-09
  • 打赏
  • 举报
回复
ListDictionary channelProperties = new ListDictionary(); channelProperties.Add("port", 1234); channelProperties.Add("name", "External"); channelProperties.Add("machineName", externalIP); TcpChannel externalChannel = new TcpChannel(channelProperties,new BinaryClientFormatterSinkProvider(),new BinaryServerFormatterSinkProvider()); ChannelServices.RegisterChannel(externalChannel); 我试了下,这样可以。
小虎 2013-04-08
  • 打赏
  • 举报
回复
我靠,我们设置的一个内网IP (192.168.1.208),这么巧合。
小虎 2013-04-08
  • 打赏
  • 举报
回复
顶,我也遇到同样的问题。
wanggenhu0 2013-01-02
  • 打赏
  • 举报
回复
新年继续顶起
wanggenhu0 2012-06-08
  • 打赏
  • 举报
回复
不知道啥时候可以解决啊,发现csdn不少此贴都未结贴
wuzhicheng5 2012-06-07
  • 打赏
  • 举报
回复
我现在也碰到了类似的问题,当返回远程对象的时候是对的,再用远程对象调用方法的时候,就报错,

原因的是远程对象携带回来的ip是内网的,客户端根本不认,也连接不上。服务器端使用bindTo无用,这不同于双网卡。

这事情真头疼。
wanggenhu0 2012-05-16
  • 打赏
  • 举报
回复
不要沉,

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧