使用了与请求的协议不兼容的地址 socket

se7en 2011-01-19 06:54:38
public partial class Form1 : Form
{
//server-用于处理客户端连接请求的socket
Socket clientSocket = null;
delegate void del();
public Form1()
{
InitializeComponent();
}
//server-侦听方法
private void listen()
{
//获取服务器IP
string hostName = Dns.GetHostName();
IPAddress[] ip = Dns.GetHostAddresses(hostName);
IPAddress HostIp = ip[0];
//创建一个网络端点
IPEndPoint iep = new IPEndPoint(HostIp, 9090);
//创建服务端服务端套接字
Socket serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//将套接字与网络端点绑定
serverSocket.Bind(iep);
//将套接字置为侦听状态,并设置最大队列数为10
serverSocket.Listen(10);
//以同步方式从侦听套接字的连接请求队列中提取第一个挂起的连接请求,然后创建并返回新的 Socket
//新的套接字:包含对方计算机的IP和端口号,可使用这个套接字与本机进行通信
clientSocket = serverSocket.Accept();
if (clientSocket != null)
{
MessageBox.Show("连接成功!");
}
}

在将套接字与网络端点绑定的时候会报这个错 ,我是新手 ,刚学习socket,麻烦帮忙指教一下 。
...全文
1847 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaoyouxiaoli 2011-03-22
  • 打赏
  • 举报
回复
这个问题主要是看你的ip是静态的,还是动态获取的,你不信可以在动态获取ip中使用,是不会出错的,或者你使用静态的,那么你可以断网来试,也不会出错!
  • 打赏
  • 举报
回复
服务器使用#3楼的IPAddress.Any来绑定endpoint是对的,必须要查找自己的ip地址。
  • 打赏
  • 举报
回复
[Quote=引用楼主 woaizuguo 的回复:]
IPAddress[] ip = Dns.GetHostAddresses(hostName);
IPAddress HostIp = ip[0];
[/Quote]
这是很想当然的啦。

要想使用ip数组中的值,也应该遍历这个数组查找到第一个ipv4类型的地址,而不是随便抓出个ip[0]呀。
tangwu0929 2011-01-19
  • 打赏
  • 举报
回复
IPAddress HostIp = IPAddress.Any;
IPEndPoint iep = new IPEndPoint(HostIp, 9090);
Socket serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
serverSocket.Bind(iep);
serverSocket.Listen(10);

这样会启用一个0.0.0.0:9090的侦听

你的做法只能在第一个IP地址上绑定侦听,如果非要在第一个IP地址上绑定,看看你的第块网卡的IP是否设置正确了。
string hostName = Dns.GetHostName();
IPAddress[] ip = Dns.GetHostAddresses(hostName);
// 插入调试用的语句
MessageBox.Show(ip[0].ToString());

wuyq11 2011-01-19
  • 打赏
  • 举报
回复
弄清现在使用的地址和请示协议所需要的地址
  • 打赏
  • 举报
回复
循环看一下IPAddress[] ip里面的值是否有效

111,101

社区成员

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

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

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