首页 新闻 会员 周边 捐助

TCP连接问题

0
悬赏园豆:180 [已关闭问题]

我下段代码连接时老是出异常“所请求的地址无效”出现在 socket.Bind(ipEndPoint)。谁能帮我看看啊,急急急急

//打开TCP端口
        private void btnConTcp_Click(object sender, EventArgs e)
        {
            try
            {
                IPAddress ip=IPAddress.Parse(tbIp.Text);//162.168.200有效的
                IPEndPoint ipEndPoint=new IPEndPoint(ip, int.Parse(tbTCPPort.Text));
                socket = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.IP);
                socket.Blocking = false; //置socket非阻塞状态
                socket.Bind(ipEndPoint); //绑定套接字
                socket.Connect(ipEndPoint);

                if(socket.Connected)
                  lbMessage.Items.Insert(0,"与主机:" + tbIp.Text + ",端口:" + tbTCPPort.Text + "连接成功");
                else
                  lbMessage.Items.Add("连接失败");
            }
            catch(Exception ex)
            {
                lbMessage.Items.Insert(0,"连接失败:"+ex.Message);
            }
        }

dongfp的主页 dongfp | 初学一级 | 园豆:6
提问于:2010-03-05 16:23
< >
分享
其他回答(7)
0

162.168.200有效的??

这是什么IP地址呢?

查尔斯 | 园豆:3832 (老鸟四级) | 2010-03-05 17:07
0

呵呵 根据你说的做了个简单的测试,应该是查尔斯说的那问题,你的IP地址应该写错了吧!

西越泽 | 园豆:10775 (专家六级) | 2010-03-05 18:57
0

请使用有效的IP地址。

风影极光 | 园豆:1573 (小虾三级) | 2010-03-05 19:57
0

程序调试一下,看看哪里出错了!是否地址搞错了??

langford | 园豆:710 (小虾三级) | 2010-03-05 23:47
0

你把socket.Bind(ipEndPoint);去掉试试看

socket.Bind(ipEndPoint); //绑定套接字  一般用于Socket服务端,监听多个链接时绑定

袁小山 | 园豆:210 (菜鸟二级) | 2010-03-06 09:26
0

绑定套接字一般用于Socket服务端,

 

而socket.Bind(ipEndPoint)中间的ipEndPoint则请使用服务地本地地址(即127.0.0.1).

 

 

 

private void btnConTcp_Click(object sender, EventArgs e){
try{
string hostname = "127.0.0.1";
int port = 1314;
IPAddress ip
=IPAddress.Parse(hostname );//127.0.0.1,指明是服务器本地地址
IPEndPoint ipEndPoint=new IPEndPoint(ip, port );
socket
= new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.IP);
socket.Blocking
= false; //置Socket非阻塞状态
socket.Bind(ipEndPoint); //绑定套接字
socket.Connect(ipEndPoint);
if(socket.Connected){
lbMessage.Items.Insert(
0,"与主机:" + hostname + ",端口:" + port.ToString() + "连接成功");
}
else{
lbMessage.Items.Add(
"连接失败");
}
}
catch(Exception ex){
lbMessage.Items.Insert(
0,"连接失败:"+ex.Message);
}
}

 

三阶 | 园豆:1636 (小虾三级) | 2010-03-06 19:31
0

socket.Bind(...) 是不需要的!

  • 对于客户端程序,通常只需要 调用Connect方法,来连接远端的服务器。 操作系统会根据路由表,自动查找一个合适的IP地址,TCP协议站会自动分配一个没有使用的端口号 给这个socket。
  • 在服务器端,提供服务的socket需要调用 Bind方法,为自己指定 需要监听的 IP地址和端口;然后调用Listen方法创建接受客户端socket请求队列;最后调用Accept方法从队列中取出连接完成的相应的 socket。

当然 在客户端程序中也可以 调用Bind方法,来指定这个连接发起的IP地址以及端口号。 对于有多个IP地址的客户端,或者需要指定本机Socket端口的情况才有意义。

肉猫 | 园豆:220 (菜鸟二级) | 2010-03-08 11:29
0

IP地址写错,你试试127.0.0.1就可以了。

piikee | 园豆:160 (初学一级) | 2010-03-12 21:33
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册