服务器端:Java编写.
客户端: C#.情况1: 服务器放在XP系统下运行,客户端放在Win7下运行.并且与服务器端进行通讯,一段时间内客户端Socket连接会自动断开(通讯状态下、非通讯状态下现象相同).另服务器有心跳机制。情况2: 服务器与客户端均放在XP系统下,服务器与客户端进行连接,无论是否进行通讯。均未出现连接中断现象.情况3: 服务器放在Win7系统下,客户端放在XP系统下.服务器与客户端进行连接,无聊是否进行通讯。均未出现连接中断现象.求高手指点原因. IPVN6已禁用.通讯socketc#服务器xp
客户端: C#.情况1: 服务器放在XP系统下运行,客户端放在Win7下运行.并且与服务器端进行通讯,一段时间内客户端Socket连接会自动断开(通讯状态下、非通讯状态下现象相同).另服务器有心跳机制。情况2: 服务器与客户端均放在XP系统下,服务器与客户端进行连接,无论是否进行通讯。均未出现连接中断现象.情况3: 服务器放在Win7系统下,客户端放在XP系统下.服务器与客户端进行连接,无聊是否进行通讯。均未出现连接中断现象.求高手指点原因. IPVN6已禁用.通讯socketc#服务器xp
private void login()
{
try
{
bw = new BackgroundWorker();
//支持实时报告进度
//支持取消
bw.WorkerReportsProgress = true;
bw.WorkerSupportsCancellation = true;
//注册事件
bw.DoWork += new DoWorkEventHandler(bw_DoWork);
bw.ProgressChanged += new ProgressChangedEventHandler(bw_ProgressChanged);
bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bw_RunWorkerCompleted);
//启动线程
bw.RunWorkerAsync();
}
catch (System.Exception)
{
Methods.showAlert(this, "登录时出现异常");
}
} #region 线程启动
//线程启动时调用的方法
private void bw_DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker bw = sender as BackgroundWorker;
//调用登录平台函数
if (checkBox1.Checked)
Socket_link("loginserver", "XXX.XXX.XXX.XXX", Int32.Parse("XX22"), bw, e);
else
Socket_link("loginserver", "XXX.XXX.XXX.XXX", Int32.Parse("XX22"), bw, e);
//Socket_link("loginserver", "XXX.XXX.XXX.XXX", Int32.Parse("XX22"), bw, e);
}
#endregion
private void Socket_link(string posid, string ip, int port, BackgroundWorker worker, DoWorkEventArgs e)
{
pid = posid;
//定义byte数组,存放消息
byte[] message = new byte[1024];
byte[] rev = new byte[1024];
try
{
if (!sendMessage.Connected)
{ //定义目标主机的IP,与端口
ipp = new IPEndPoint(IPAddress.Parse(ip), port);
//创建套接字
sendMessage = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); //连接目标主机(服务器)
sendMessage.Connect(ipp);
byte[] re = new byte[1024]; //发送报文类
SendMessage POSsendMessage = new SendMessage();
POSsendMessage.setPid(pid); //接受报文类
ReceiveMessage receiveMessage = new ReceiveMessage(); //发送报文
sendMessage.Send(Encoding.UTF8.GetBytes(pid)); //接收报文
sendMessage.Receive(re);
string strMessage = Encoding.UTF8.GetString(re, 0, re.Length);
strMessage = strMessage.Replace("\0", "").Trim();
if (!strMessage.StartsWith("loginsuccess"))
{
sendMessage.Close();
ReceiveUtil.sendMessage = null;
Methods.showInfo(this, "登陆失败");
labelMessage = "";
this.toolStrip.Text = "";
return;
}
else
{
string[] str = strMessage.Trim().Split(';');
string[] temp = str[0].Trim().Split(',');
string MyPort = temp[1].Trim().Substring(temp[1].Trim().IndexOf("=") + 1);
string tempHost = str[2].Trim();
string hostName = str[2].Trim().Substring(str[2].Trim().IndexOf(":") + 1);
string MyIp = str[1].Trim().Substring(str[1].Trim().IndexOf(":") + 1);
string myO = " 用户名:" + hostName.Trim().Replace(@"\0", "");
string myP =" IP: " + MyIp.Trim() + " 端口号: " + MyPort.Trim();
labelMessage = myO + myP;
this.toolStrip.BeginInvoke(new System.EventHandler(ChangeLabel_UI), labelMessage);
}
}
//设置控件
listenThread.Start();
this.btnLogin.BeginInvoke(new System.EventHandler(LoginUI), "退出");
timer2.Start();
ReceiveUtil.sendMessage = sendMessage;
Methods.showInfo(this, "登陆成功");
sendMessage.Send(Encoding.UTF8.GetBytes("refreshusers"));
}
catch (Exception ex)
{
sendMessage.Close();
ReceiveUtil.sendMessage = null;
e.Cancel = true;
if (ex.ToString().Contains("由于目标机器积极拒绝,无法连接"))
{
Methods.showInfo(this, "服务器连接失败");
}
else if (ex.ToString().Contains("由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。"))
{
Methods.showInfo(this, "服务器连接失败");
}
} }