我下段代码连接时老是出异常“所请求的地址无效”出现在 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);
}
}
162.168.200有效的??
这是什么IP地址呢?
请使用有效的IP地址。
程序调试一下,看看哪里出错了!是否地址搞错了??
你把socket.Bind(ipEndPoint);去掉试试看
socket.Bind(ipEndPoint); //绑定套接字 一般用于Socket服务端,监听多个链接时绑定
绑定套接字一般用于Socket服务端,
而socket.Bind(ipEndPoint)中间的ipEndPoint则请使用服务地本地地址(即127.0.0.1).
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);
}
}
socket.Bind(...) 是不需要的!
当然 在客户端程序中也可以 调用Bind方法,来指定这个连接发起的IP地址以及端口号。 对于有多个IP地址的客户端,或者需要指定本机Socket端口的情况才有意义。
IP地址写错,你试试127.0.0.1就可以了。