代码如下:
发送端:
private void btnSendFile_Click(object sender, System.EventArgs e)
{
TcpClient tcpClient;
NetworkStream ns;
FileStream fs;
try
{
tcpClient=new TcpClient(this.txtHost.Text,int.Parse(this.txtPort.Text));
ns=tcpClient.GetStream();
fs=File.Open(this.tBFileName.Text,FileMode.Open); int data=fs.ReadByte();
while(data!=-1)
{
ns.WriteByte((byte)data);
data=fs.ReadByte();
}
fs.Close();
ns.Close();
tcpClient.Close();
}
catch(Exception ex)
{Console.WriteLine(ex.ToString());}
finally
{}

}
接收端:
public Form1()
{
//
// Windows 窗体设计器支持所必需的
//
InitializeComponent();
Thread thread=new Thread(new ThreadStart(Listen));
thread.Start();
//
// TODO: 在 InitializeComponent 调用后添加任何构造函数代码
//
}
public void Listen()
{
IPAddress myAddress=IPAddress.Parse("10.2.8.57");
TcpListener tcpListener=new TcpListener(myAddress,2112);
tcpListener.Start(); TcpClient tcpClient=tcpListener.AcceptTcpClient(); NetworkStream ns=tcpClient.GetStream();
StreamReader sr=new StreamReader(ns);
string result=sr.ReadToEnd(); Invoke(new UpdateDisplayDelegate(UpdateDisplay),new object[]{result}); tcpClient.Close();
tcpListener.Stop();
}
public void UpdateDisplay(string text)
{this.TxtDisplay.Text=text;} protected delegate void UpdateDisplayDelegate(string text);10.2.8.57  是本机的IP,发送端的IP和端口写的都和接收端一至。
只能正常做用一次,第二次发送端就报错:System.Net.Sockets.SocketException: 由于目标机器积极拒绝,无法连接。必须重启动一下接收端就正常。
这是为什么啊

解决方案 »

  1.   

    试试while (true)
                {
                   TcpClient   tcpClient=tcpListener.AcceptTcpClient();                NetworkStream   ns=tcpClient.GetStream(); 
                   StreamReader   sr=new   StreamReader(ns); 
                    string   result=sr.ReadToEnd();                Invoke(new   UpdateDisplayDelegate(UpdateDisplay),new   object[]{result});              
                    
                }
      

  2.   

    樓上正解。
    調用一次AcceptTcpClient(),衹接收一個客戶端
      

  3.   

    while (true)
    {...}true代有一个逻辑值. 
    当在循环体当中没有break之类的语句时.就相当于一个死循环堵塞 
    在socket编程,用多线程和这种方式来处理接收消息.