Socket可以客户端先启动服务端后启动吗?

zhangmengfu 2012-12-15 10:26:38
刚刚学习了socket,照着例子自己又敲了一遍代码,过程中突然想到一个功能,可不可以在服务端没有启动之前,客户端就去一直Connected,知道服务端启动后连接到服务端。但是我尝试去做的时候,先启动客户端(我把连接功能写到了窗体加载时间里了。)Connect就会引发SocketException异常,提示说“由于目标计算机积极拒绝,无法连接。 192.168.55.22:9988”

下面贴客户端部分代码
 try
{
socketConnection = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPAddress ipa = IPAddress.Parse(txtIP.Text.Trim());
endpoint = new IPEndPoint(ipa, int.Parse(txtPort.Text.Trim()));
socketConnection.Connect(endpoint);
threadWatch = new Thread(connectionRec);
threadWatch.IsBackground = true;
threadWatch.Start();
}
catch (SocketException ex)
{
do
{
socketConnection.Connect(endpoint);
} while (socketConnection.Connected == false);
threadWatch = new Thread(connectionRec);
threadWatch.IsBackground = true;
threadWatch.Start();
}
catch (Exception ex)
{
MessageBox.Show(ex + "");
}
...全文
844 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhangmengfu 2012-12-15
  • 打赏
  • 举报
回复
引用 3 楼 sp1234 的回复:
你在好好想想吧。
请教一下,刚刚在网上查了下资料,用长连接+心跳包是不是可以解决我这个问题呢?定时去尝试连接服务端,如果没有连接到就一直去尝试连接,直到连接到服务端。
  • 打赏
  • 举报
回复
你在好好想想吧。
zhangmengfu 2012-12-15
  • 打赏
  • 举报
回复
引用 1 楼 sp1234 的回复:
把你的 MessageBox.Show(ex + ""); 删除掉,(对于你的设计而言)不就完了嘛。
删掉也没有用啊。在catch快照样异常。
  • 打赏
  • 举报
回复
把你的 MessageBox.Show(ex + ""); 删除掉,(对于你的设计而言)不就完了嘛。
  • 打赏
  • 举报
回复
你的代码,如果连接成功自然就启动了connectionRect。 而如果没有启动它,你可以过一会儿(例如每隔10秒钟)再执行你的代码嘛。
EIT王子 2012-12-15
  • 打赏
  • 举报
回复

//可以参考一下这个,有一些异常提示你可以删除掉,就不会弹对话框。
 public void link()
        {
            IPAddress ipRemote;
            string ip = ConfigurationManager.AppSettings["MainMachine"].ToString();
            string ipport = ConfigurationManager.AppSettings["MainMachinePort"].ToString();
            try
            {
                ipRemote = IPAddress.Parse(ip);
            }
            catch //判断给定的IP地址的合法性 
            {
                MessageBox.Show(string.Format("输入的IP地址{0}不合法!", ip), "错误提示");
                return;
            }
            IPHostEntry ipHost;
            try//判断IP地址对应主机是否在线 
            
            {
                ipHost = Dns.GetHostEntry(ip);
            }
            catch 
            {
                MessageBox.Show(string.Format("远程主机{0}不在线!", ip), "错误提示!");
                return;
            }
            string sHostName = ipHost.HostName;
            try
            {
                tcpClient = new TcpClient(sHostName, int.Parse(ipport));//对远程主机的8000端口提出TCP连接申请 
                nsStream = tcpClient.GetStream();//通过申请,并获取传送数据的网络基础数据流   
                swWriter = new StreamWriter(nsStream);//使用获取的网络基础数据流来初始化StreamWriter实例 
                tcpConnect = true;
                label1.Text = "已经连接!";
            }
            catch
            {
                MessageBox.Show(string.Format("无法和远程主机{0}:端口{1}建立连接!", ip, ipport), "错误提示!");
                return;
            } 
        }
EIT王子 2012-12-15
  • 打赏
  • 举报
回复
你可以写一段测试的咯。。然后测试到服务器在线的时候再连接啊。

110,571

社区成员

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

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

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