传送窗体主要代码
//引用代码
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;
using System.IO;
using System.Text;
//按钮事件代码
//取得预发送的文件名
string SendFileName=textBox5.Text.Trim();
//远程主机
string RemoteHostName=textBox1.Text.Trim();
//远程端口
int RemotePort=Int32.Parse(textBox2.Text.Trim());
//得到主机信息
IPHostEntry ipInfo=Dns.GetHostByName(RemoteHostName);
//取得IPAddress[]
IPAddress[] ipAddr=ipInfo.AddressList;
//得到远程接收IP
IPAddress ip=ipAddr[0];
//组合出远程终结点
IPEndPoint hostEP=new IPEndPoint(ip,RemotePort);
//创建Socket 实例
Socket socket=new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
try
{
//尝试连接
socket.Connect(hostEP);
}
catch(Exception se)
{
MessageBox.Show("连接远程IP错误"+se.Message,"提示信息",MessageBoxButtons.RetryCancel,MessageBoxIcon.Information);
}
//发送文件流代码
NetworkStream tcpStream = new NetworkStream(socket) ;
FileStream fs = new FileStream(SendFileName, FileMode.Open, FileAccess.Read);
BinaryReader fileReader = new BinaryReader(fs,Encoding.Default);
long Total=fs.Length;
byte[] bytes = new byte[Total];
int hasRead=0;
int len;
//获取要传输文件的总长度
//读取文件写入到数据流中
while((hasRead<=fs.Length)&&tcpStream.CanWrite&&fileReader.Read(bytes,0,bytes.Length)!=0)
//while((hasRead = fileReader.Read(bytes,0,bytes.Length)) != 0)
{
//从要传输的文件读取指定长度的数据
len =fileReader.Read(bytes,0,bytes.Length) ;
//将读取的数据发送到对应的计算机
tcpStream.Write(bytes,0,hasRead);
try
{
//向主机发送请求
socket.Send(bytes,bytes.Length,0);
this.statusBar1.Text+=" "+hasRead;
}
catch(Exception ce)
{
MessageBox.Show("发送错误:"+ce.Message,"提示信息",MessageBoxButtons.RetryCancel,MessageBoxIcon.Information);
}
//增加已经发送的长度
hasRead+=len ;
}
fileReader.Close();
fs.Close();
//禁用Socket
socket.Shutdown(SocketShutdown.Both);
//关闭Socket
socket.Close();
this.statusBar1.Text+="文件成功发送!";
接收窗体主要代码
//引用代码
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using System.IO;
using System.Text;
//按钮事件代码
/// <summary>
/// 必需的设计器变量。
/// </summary>
///
private Thread thThreadRead ;
//创建线程,用以侦听端口号,接收信息
private TcpListener tlTcpListen ;
//侦听端口号
private bool blistener = true ;
//设定标示位,判断侦听状态
private Socket stRead ;
private System.Windows.Forms.Button button4;
private void button1_Click(object sender, System.EventArgs e)
{
thThreadRead = new Thread ( new ThreadStart( Listen ) ) ;
//以Listen过程来初始化Thread实例
thThreadRead.Start ( ) ;
//启动线程
button1.Enabled = false ;
}
private void Listen()
{
try
{
IPHostEntry ieh=Dns.GetHostByName(Dns.GetHostName());
IPAddress LocalIP = ieh.AddressList[0];
int LocalPort=Int32.Parse(textBox4.Text);
this.textBox3.Text=LocalIP.ToString();
string ReceiveFileName=textBox6.Text.Trim();
tlTcpListen = new TcpListener( LocalIP, LocalPort );
//以8000端口号来初始化TcpListener实例
tlTcpListen.Start ( ) ;
//开始监听网络的连接请求
statusBar1.Text = "程序正在监听..." ;
stRead = tlTcpListen.AcceptSocket() ;
//通过连接请求,并获得接收数据时使用的Socket实例
EndPoint tempRemoteEP = stRead.RemoteEndPoint ;
IPEndPoint tempRemoteIP = ( IPEndPoint ) tempRemoteEP ;
//获取请求的远程计算机名称
IPHostEntry host = Dns.GetHostByAddress ( tempRemoteIP.Address ) ;
string sHostName = host.HostName ;
statusBar1.Text = "远程电脑: "+ sHostName + " 已经与本机通过端口 " +LocalPort.ToString()+" 成功建立连接!" ;
//同意和发送端计算机建立连接
string ReceiveContent="";
string sTime = DateTime.Now.ToShortTimeString ( ) ;
int iRead;
//循环侦听
while (blistener)
{
//获取接收数据时的时间
Byte [ ] byRead =new Byte [229888] ;
iRead = stRead.ReceiveFrom ( byRead , ref tempRemoteEP ) ;
//读取完成后退出循环
if(iRead<=0)
{
this.button1.Enabled = true ;
//保存数据流为本地文件
byte[] content=Encoding.Default.GetBytes(ReceiveContent);
try
{
//创建文件流对象实例
FileStream fs=new FileStream(ReceiveFileName,FileMode.OpenOrCreate,FileAccess.ReadWrite);
//写入文件
fs.Write(content,0,content.Length);
fs.Close();
}
catch(Exception fe)
{
MessageBox.Show("文件创建/写入错误:"+fe.Message,"提示信息",MessageBoxButtons.RetryCancel,MessageBoxIcon.Information);
}
//richTextBox1.Text ="/n/r接收时间 "+ sTime + "/n/r接收文件内容 " +ReceiveContent ;
richTextBox1.Text =ReceiveContent ;
stRead.Close ( ) ;
tlTcpListen.Stop ( ) ;
//关闭侦听
statusBar1.Text = "连接已经关闭!" ;
thThreadRead.Abort() ;
//中止线程
break ;
}
else
{
//将读取的字节数转换为字符串
//ReceiveContent+="/n/r本次"+iRead+"字节 "+Encoding.Default.GetString(byRead);
ReceiveContent+=Encoding.Default.GetString(byRead);
//ReceiveContent+=stRead.re"/n/r本次"+iRead+"字节 "+Encoding.Default.GetString(byRead);
}
}
}
catch ( System.Security.SecurityException )
{
MessageBox.Show ( "侦听失败!" , "错误" ) ;
this.button1.Enabled=true;
}
}