[STAThread]
static void Main() 
...{
Application.Run(new Form1());
}
private void StartLisen ()//助教要作的事情
...{
System.Net.IPAddress ip = System.Net.IPAddress.Parse ("10.0.3.4") ;// 将 IP 地址字符串转换为 System.Net.IPAddress 实例。
System.Net.IPEndPoint ipe = new System.Net.IPEndPoint (ip , 10000) ;//用指定的IP地址和端口号将网络终端端点实例化。
tl= new System.Net.Sockets.TcpListener (ipe) ;// 使用终结点ipe初始化 该侦听类的新实例
tl.Start () ; 
while (true)
...{
System.Net.Sockets.TcpClient tc = tl.AcceptTcpClient () ; //网络客户端tc 接受网络侦听类tl挂起的连接请求
System.Net.Sockets.NetworkStream ns = tc.GetStream () ;//返回用于发送和接受的数据流给ns
byte [] buf = new byte [1024] ;
int r = 0 ;
while ((r = ns.Read (buf , 0 , buf.Length ))!=0) 
...{
string s = System.Text.Encoding.Default.GetString (buf ) ;
this.ChatHistory.AppendText (s) ;
}
ns.Close () ;
}
}
private System.Threading.Thread td ; //定义td私有变量线程
private System.Net.Sockets.TcpListener tl ; //定义网络客户端侦听 tl
private void OnLine_Click(object sender, System.EventArgs e) //上线
...{
System.Threading.ThreadStart ts = new System.Threading.ThreadStart(StartLisen) ;
//助教计划 ,(生成td线程的一个ts计划,传入所要触发的StartLisen事件)
td = new System.Threading.Thread (ts) ;
//生成助教 ---并把计划交给他
td.Start () ;
System.Threading.ThreadStart ts2 = new System.Threading.ThreadStart (StartLisen2) ;
td2 = new System.Threading.Thread (ts2);
td2.Start () ;
}
private void OffLine_Click(object sender, System.EventArgs e) //下线
...{
this.td.Abort () ; //线程实例td终止
this.tl.Stop () ; //客户端侦听tl关闭
this.td2.Abort() ;
this.tl2.Stop() ;
}
private void Send_Click(object sender, System.EventArgs e) //发送聊天内容
...{
System.Net.Sockets.TcpClient tc = new System.Net.Sockets.TcpClient(this.IpAdd.Text,10000) ;
// 初始化客户端类的一个新实例,并将其绑定到指定的10000本地终结点。
System.Net.Sockets.NetworkStream ns = tc.GetStream ();
string s = this.MyName.Text+System.Environment.NewLine+this.ChatText.Text;
this.ChatHistory.AppendText(s) ;
byte [] buf = System.Text.Encoding.Default.GetBytes(s) ;
ns.Write (buf , 0 , buf.Length );
ns.Close () ;
}
private System.Threading.Thread td2 ;
private System.Net.Sockets.TcpListener tl2 ;
private void StartLisen2 () //监听,即可以接收对方的文件 
...{
System.Net.IPAddress ip = System.Net.IPAddress.Parse ("10.0.*.*") ;// 将 接收方的IP 地址字符串转换为 System.Net.IPAddress 实例。
System.Net.IPEndPoint ipe = new System.Net.IPEndPoint ( ip , 10001) ;//用指定的IP地址和端口号将网络终端端点实例化。
tl2= new System.Net.Sockets.TcpListener (ipe) ;// 使用终结点ipe初始化 该侦听类的新实例
tl2.Start () ;
while (true)
...{
System.Net.Sockets.TcpClient tc = tl2.AcceptTcpClient () ; //网络客户端tc 接受网络侦听类tl挂起的连接请求
System.Net.Sockets.NetworkStream ns = tc.GetStream () ;//返回用于发送和接受的数据流给ns
if(this.saveFileDialog1.ShowDialog() == DialogResult.OK )
...{
string fm = this.saveFileDialog1.FileName ;
System.IO.FileStream wfs = new FileStream (fm,System.IO.FileMode.Create) ;
byte [] buf = new byte [1024] ;
int r = 0 ;
while ((r = ns.Read (buf , 0 , buf.Length ))!=0) 
...{
wfs.Write(buf,0,r) ;
}
ns.Close () ;
wfs.Close() ;
}
}
}
private void openfile_Click(object sender, System.EventArgs e) //发送文件
...{
if(this.openFileDialog1.ShowDialog()==DialogResult.OK) 
...{
string fm = this.openFileDialog1.FileName ;
System.IO.FileStream rfs = new FileStream(fm,System.IO.FileMode.Open) ; 
System.Net.Sockets.TcpClient tc = new System.Net.Sockets.TcpClient(this.IpAdd.Text,10001) ;
System.Net.Sockets.NetworkStream ns = tc.GetStream ();
byte [] buf =new byte[1024];
int i ;
while ((i=rfs.Read(buf,0,buf.Length)) !=0 )
...{
ns.Write (buf , 0 , i ) ;
}
rfs.Close() ;
ns.Close () ;
}
}
private void sendfile_Click(object sender, System.EventArgs e) 
...{
}
private void ChatText_TextChanged(object sender, System.EventArgs e)
...{
}
本文介绍了一个基于C#实现的TCP聊天程序与文件传输功能。通过创建多个线程来处理聊天消息的接收和发送,同时实现了文件的发送与接收功能。文中详细展示了如何配置IP地址与端口,启动监听服务,以及处理网络流的操作。
904

被折叠的 条评论
为什么被折叠?



