我的一个小domo希望大家帮我改改~!报错:
通常每个套接字地址(协议/网络地址/端口)只允许使用一次。
这个是发送端~!!!
private void SocketSend()
{
System.Net.Sockets.Socket SendSocket = new System.Net.Sockets.Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
IPEndPoint endPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"),80);
FileStream fileSteam = new FileStream(Server.MapPath("myFile.txt"),FileMode.OpenOrCreate,FileAccess.Read);
Byte[] fsSize = new byte[fileSteam.Length-1];
BinaryReader reader = new BinaryReader(fileSteam);
reader.Read(fsSize,0,(int)fileSteam.Length-1);SendSocket.Connect(endPoint);SendSocket.Send(fsSize);fileSteam.Close();SendSocket.Shutdown(SocketShutdown.Send);SendSocket.Close();
}

解决方案 »

  1.   

    接收端~!!
    private void SendReceiveData()
    {
    System.Net.Sockets.Socket receiveSocket = new System.Net.Sockets.Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
    IPEndPoint hostPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"),80);
    receiveSocket.Bind(hostPoint);
    receiveSocket.Listen(2);Byte[] recData = new byte[300000000];
    System.Net.Sockets.Socket hostSocket = receiveSocket.Accept();
    hostSocket.Receive(recData);if(hostSocket.Receive(recData)>0)
    {
    this.LableData.Text = "网页在" + DateTime.Now.ToString()
    +"接受的数据大小为:" + hostSocket.Receive(recData).ToString();}FileStream fileStream = new FileStream(Server.MapPath("myNewFile.dat"),FileMode.OpenOrCreate);
    BinaryWriter writer = new BinaryWriter(fileStream);
    writer.Write(recData,0,recData.Length-1);
    fileStream.Close();
    hostSocket.Shutdown(SocketShutdown.Receive);
    hostSocket.Close();
    }receiveSocket.Bind(hostPoint);报错~!(通常每个套接字地址(协议/网络地址/端口)只允许使用一次。)
      

  2.   

    我主要做的事用 socket发送 myFile.txt文件 然后SendReceiveData()函数里面得到myFile.txt文件 然后再 写成myNewFile.dat ····
      

  3.   

    IPEndPoint hostPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"),80);
    不要用80端口。换一个1980
      

  4.   

    换成别的端口辣~! 就开始链接的时候就报错啦~!!
    SendSocket.Connect(endPoint);
      

  5.   

    to 上面那位大哥,你是放系网站里运行的么?我代码类似过我先前看的那段。我试过换左公网IP的时间不行阿。只有本机IP才行阿。(asp.net)
      

  6.   

    80端口是系统默认的http端口,一般情况都是系统自动打开的,
    一般用户自定义端口都用2000后,反正就是不要与常用的那些冲突。而且你客户端进行连接时,报错【由于目标机器积极拒绝,无法连接。】的话,是你服务端没有打开这个端口,或者打开了端口,但是服务端有防火墙。
      

  7.   

    由于目标机器积极拒绝
    是你代码问题
    你不要先急着关闭socket
      

  8.   

    第一个 socket 不要关?
      

  9.   

    to  ~``lizhizhe2000(彬彬) 
    端口 是 保持一样·!
      

  10.   

    主要原因是你在同一台机子上用同一个端口又发送又接收
    你把接收端放到另一台计算机上 IP也要改过来或者接收端用TCPListener直接监听。如TcpListener mylisten=new TcpListener(800);
      

  11.   

    接受端:
    Socket t_server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                t_server.Bind(new IPEndPoint(IPAddress.Any, 2222));
                t_server.Listen(2);
                FileStream file = new FileStream (@"d:\1.txt",FileMode.Create );
                byte[] buffer = new byte[1024];
                Socket tmp = t_server.Accept();
                int i =0;
                while ((i = tmp.Receive(buffer)) != 0)
                {                file.Write(buffer, 0, i);
                }
                file.Close();发送端:
                Socket t_client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                t_client.Connect("127.0.0.1", 2222);
                t_client.SendFile(@"d:\2.txt");
                t_client.Close();
      

  12.   

    to jx0797(·打过飞机算处男吗?·) 
    朋友~!你给出的代码好像也不行哦~!!
    先运行发送端  运行到    t_client.Connect() 端口问题 ;  这个的时候就报错啦~!!由于目标机器积极拒绝,无法连接。 
      

  13.   

    哎~~~~郁闷哦~!socket 这样的东西 ~O  不好搞2哦~!!郁闷~!!
      

  14.   

    看看这些http://dev.yesky.com/msdn/182/2448182.shtmlhttp://www.enet.com.cn/article/2004/0810/A20040810332401.shtml
      

  15.   

    其实很简单的 你的端口选不同的就可以了 规定的是一个 ip/port 不能被多个对象同时使用
      

  16.   

    发送端连接远程主机的时候 SendSocket.Connect(endPoint);
    这个endpoint的主机地址最好用Dns.GetHostEntry(Dns.GetHostName()).AddressList[0];
    有时候用回环地址会有问题 你应该尽量模拟出是两台不同的主机
      

  17.   

    楼主贴出的代码对于发送小文件本身没什么问题(端口别用80,一般已占了),出错是因为环境。程序写在了web里面,楼主是怎么测试发送和接收功能的。又是怎么设计的,怎么会在asp.net里面用到socket。ps: 发送和接收端在同一机器没问题,另外不管是不是同一机器,当然监听和发送要用同一端口。
      

  18.   

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.Threading;
    using System.IO;
    using System.Net;
    using System.Net.Sockets;namespace TestService
    {
        public partial class Service : Form
        {
            public Service()
            {
                InitializeComponent();
            }
            Thread ServiceStart = null;
            TcpListener listerner = null;        private void Startbtu_Click(object sender, EventArgs e)
            {
                this.Startbtu.Enabled = false;
                this.StopBtu.Enabled = true;
                ServiceStart = new Thread(new ThreadStart(Start));
                ServiceStart.Start();        }
            void Start()
            {            listerner = new TcpListener(8300);
                listerner.Start();
                while (true)
                {
                    TcpClient client = null;                while (listerner.Pending())
                    {
                        client = listerner.AcceptTcpClient();
                        ThreadPool.QueueUserWorkItem(new WaitCallback(Process), client);
                    }                Thread.Sleep(100);
                }            
            }
            void Process(object state)
            {
                TcpClient client = (TcpClient)state;
                StreamReader reader = null;            try
                {                
                    Stream stream = client.GetStream();
                    reader = new StreamReader(stream);
                    //StreamWriter writer = new StreamWriter(stream);
                    this.textBoxShow.Text = reader.ReadLine();
                }
                finally
                {
                    reader.Close();
                    client.Close();
                }
            }        private void StopBtu_Click(object sender, EventArgs e)
            {
                this.Startbtu.Enabled = true;
                this.StopBtu.Enabled = false;
                this.ServiceStart.Abort();
                this.ServiceStart = null;
                this.listerner.Stop();
                this.listerner = null;
            }
        }
    }
    //这个是service端的
    /**/
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.Net.Sockets;
    using System.Net;
    using System.IO;namespace TestClient
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }        private void buttonSend_Click(object sender, EventArgs e)
            {
                TcpClient client = new TcpClient("localhost", 8300);
                StreamWriter writer = null;
               // StreamReader reader = null;
                string sInput = this.textBoxInput.Text;            try
                {
                    writer = new StreamWriter(client.GetStream());
                    writer.WriteLine(sInput);
                    writer.Flush();            }
                finally
                {
                    writer.Close();
                    client.Close();
                }
            }
        }
    }
    //这个是client端的,刚写的,可以用,试一下,把stream改成你对应的filestream就行
      

  19.   

    先启动service端,然后按Startbtu_Click,在启动client,在textBoxInput里输点东西,按buttonSend_Click就可以了,windows form自己设计咯
      

  20.   

    小声地问一句。。在web 里面不能用socket?
      

  21.   

    跟web服务器的默认端口冲突了