代码如下:
发送端:
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: 由于目标机器积极拒绝,无法连接。必须重启动一下接收端就正常。
这是为什么啊
发送端:
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: 由于目标机器积极拒绝,无法连接。必须重启动一下接收端就正常。
这是为什么啊
解决方案 »
- C#中string.contains(string str)忽略大小写
- C#的MEF中动态删除出口的问题
- &# 编码 对搜索引擎的收录有影响吗?
- SQL格式化datetime
- 使用正则表达式提取一定格式的字符串的问题
- ReportViewer中是否有打印页数的设置?
- 替代this关键字
- 关于tcp/ip跨段传送文件的问题(c#)
- 活动目录编程问题,解决到差不多了,就差一点了~~~~~
- 如何把string格式转化为与SQL中的money相对应的DATA TYPE
- 初学者,的一个多线程问题。
- 在线等待-----我想在.net的project里做一个icon,手头有图片文件(如bitmap,jpg),如何把它们转化成ico文件,visual studio2005提供集成工具吗?
{
TcpClient tcpClient=tcpListener.AcceptTcpClient(); NetworkStream ns=tcpClient.GetStream();
StreamReader sr=new StreamReader(ns);
string result=sr.ReadToEnd(); Invoke(new UpdateDisplayDelegate(UpdateDisplay),new object[]{result});
}
調用一次AcceptTcpClient(),衹接收一個客戶端
{...}true代有一个逻辑值.
当在循环体当中没有break之类的语句时.就相当于一个死循环堵塞
在socket编程,用多线程和这种方式来处理接收消息.