大家看看吧,这个也是网上的一个例子,为什么我无法运行呢,问题出现在这个地方
socket.Connect(hostEP);
private void Download_Click(object sender, System.EventArgs e) { //取得预保存的文件名
string fileName="d:\\1.txt";
//端口
int port=10001;
//得到ip
IPAddress ip=IPAddress.Parse("192.168.1.2");                   //组合出远程终结点
IPEndPoint hostEP=new IPEndPoint(ip,port);
//创建Socket 实例
Socket socket=new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
try
{
//尝试连接
socket.Connect(hostEP);
}
catch(Exception se)
{
MessageBox.Show("连接错误"+se.Message,"提示信息"
,MessageBoxButtons.RetryCancel,MessageBoxIcon.Information);
}
//发送给远程主机的请求内容串
string sendStr="GET / HTTP/1.1\r\nHost: " + hostName +
"\r\nConnection: Close\r\n\r\n";
//创建bytes字节数组以转换发送串
byte[] bytesSendStr=new byte[1024];
//将发送内容字符串转换成字节byte数组
bytesSendStr=Encoding.ASCII.GetBytes(sendStr);
try
{
//向主机发送请求
socket.Send(bytesSendStr,bytesSendStr.Length,0);
}
catch(Exception ce)
{
MessageBox.Show("发送错误:"+ce.Message,"提示信息"
,MessageBoxButtons.RetryCancel,MessageBoxIcon.Information);
}
//声明接收返回内容的字符串
string recvStr="";
//声明字节数组,一次接收数据的长度为1024字节
byte[] recvBytes=new byte[1024];
//返回实际接收内容的字节数
int bytes=0;
//循环读取,直到接收完所有数据
while(true)
{
bytes=socket.Receive(recvBytes,recvBytes.Length,0);
//读取完成后退出循环
if(bytes<=0)
break;
//将读取的字节数转换为字符串
recvStr+=Encoding.ASCII.GetString(recvBytes,0,bytes);
}
//将所读取的字符串转换为字节数组
byte[] content=Encoding.ASCII.GetBytes(recvStr);
try
{
//创建文件流对象实例
FileStream fs=new FileStream(fileName,FileMode.OpenOrCreate,FileAccess.ReadWrite);
//写入文件
fs.Write(content,0,content.Length);
}
catch(Exception fe)
{
MessageBox.Show("文件创建/写入错误:"+fe.Message,"提示信息",MessageBoxButtons.RetryCancel,MessageBoxIcon.Information);
}
//禁用Socket
socket.Shutdown(SocketShutdown.Both);
//关闭Socket
socket.Close();

}

解决方案 »

  1.   

    可能是服务端监听不正确
    1,核对服务端IP地址和Port
    2,确保两边防火墙都允许 各自的 端口开放,调试时我一般把防火墙全关掉,比如XP自带的防火墙
    3,不行的话用间谍软件从客户端扫描服务端的IP地址和Port,以确定它是否正确打开
      

  2.   

    我的机器是win2000,能够ping通192.168.1.2
    192.168.1.2这台机器是linux,不知道是不是这个原因?
    还有192.168.1.2哪里肯定有程序在监听的
      

  3.   

    telnet 目标IP:端口,如果可以连接,说明服务端端口肯定开放,如果开放了,就检查你提交的web请求内容,不符合http协议的,webserver都会主动断开,你可以测试一下其他公网webserver来看web请求是否正确
      

  4.   

    端口肯定开着我把ProtocolType.Tcp改成ProtocolType.Udp协议,
    它竟然说:请求的协议还没有在系统中配置,或者没有它存在的迹象。
    难道我没有安装udp协议?
      

  5.   

    前段时间用remoting作东西的时候遇到过这个问题,好像原因是你打开了一个端口,但是程序退出时,没有释放对这个端口的占用,就会导致这个问题的发生,看一下代码里面是不是有未被释放的资源或者对象
      

  6.   

    你首先要建立一个监听该端口的工程, //端口
    int port=10001;
    //得到ip
    IPAddress ip=IPAddress.Parse("192.168.1.118");                  //组合出远程终结点
    IPEndPoint hostEP=new IPEndPoint(ip,port);
    //创建Socket 实例
    Socket socket=new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp); string sendStr="dfdfdfdf";
    //创建bytes字节数组以转换发送串
    byte[] bytesSendStr=new byte[1024];
    //将发送内容字符串转换成字节byte数组
    bytesSendStr=Encoding.ASCII.GetBytes(sendStr); try
    {
    socket.Bind(hostEP);
    //侦听
    socket.Listen(10);
    MessageBox.Show("正在侦听…");
    if(socket.Connected)
    {
    MessageBox.Show("连接成功!");
    socket.Send(bytesSendStr);
    }
    }
    catch(Exception se)
    {
    MessageBox.Show("连接错误"+se.Message,"提示信息"
    ,MessageBoxButtons.RetryCancel,MessageBoxIcon.Information);
    return;
    }
    然后再进行连接就可以了
      

  7.   

    谢谢zkw(飞龙) ,我按你的建议做了一个监听端口的工程,主副机都是本机已经可以连接了。不过还有个问题,现在用的是tcp协议,而如果我把程序这里改成
     Socket socket=new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Udp)
    就怎么也运行不了了,而且报这个错:请求的协议还没有在系统中配置,或者没有它存在的迹象,不知道udp协议的程序怎么改写才行?
      

  8.   

    有人知道udp协议怎么处理吗?现在就是这里改成ProtocolType.Udp出错,用ProtocolType.Tcp就没问题  Socket socket=new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Udp)
    出错信息:请求的协议还没有在系统中配置,或者没有它存在的迹象谢谢