VisualC#中托管Socket的实现方法(二) (2)
来源:互联网 发布:淘宝1920海报怎么设置 编辑:程序博客网 时间:2024/05/16 01:30
导读:
7.在Form1.cs中的Main函数之后,添加下列代码,下列代码的作用是定义过程“Listen”,此过程的功能是监听“8000”端口号,接收网络中连接请求,建立连接,并获取接收数据时使用的Socket实例,并以Socket实例来接收客户机程序发送来的数据。并根据客户机发送来控制码来断开网络连接,释放资源:
{
try
{
tlTcpListen = new TcpListener ( port ) ;
//以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 = "已经连接!" ;
//循环侦听
while ( blistener )
{
string sTime = DateTime.Now.ToShortTimeString ( ) ;
//获取接收数据时的时间
Byte [ ] byRead =new Byte [ 80 ] ;
int iRead = stRead.ReceiveFrom
( byRead , ref tempRemoteEP ) ;
//获得接收的字节数目
Byte [ ] byText = new Byte [ iRead ] ;
//并根据接收到的字节数目来定义字节数组
Array.Copy ( byRead , 0 , byText , 0 , iRead ) ;
string sTemp = System.Text.Encoding.Default.
GetString ( byText ) ;
//判断是否为断开连接控制码
if ( sTemp.Trim ( ) == "STOP" )
{
stRead.Close ( ) ;
tlTcpListen.Stop ( ) ;
//关闭侦听
statusBar1.Text = "连接已经关闭!" ;
thThreadRead.Abort ( ) ;
//中止线程
return ;
}
else
listBox1.Items.Add ( sTime + ""+ sTemp ) ;
} catch ( System.Security.SecurityException )
{
MessageBox.Show ( "侦听失败!" , "错误" ) ;
}
}
8.用下列代码替换Form1.cs中的button1组件的Click事件对应的处理代码,下面代码是以刚刚定义“Listen”过程来初始化线程实例thThreadRead,并启动这个线程:
private void button1_Click ( object sender , System.EventArgs e )
{
thThreadRead = new Thread ( new ThreadStart ( Listen ) ) ;
//以Listen过程来初始化Thread实例
thThreadRead.Start ( ) ;
//启动线程
button1.Enabled = false ;
}
至此,在保存上述的所有修改步骤之后。一个基于TCP协议的、利用Socket接收端程序的就完成了。图03和图04分别是上述二个示例运行后的界面
图03:【利用Socket来传送数据】的运行界面
图04:【利用Socket来接收数据】的运行界面
六.总结:
.Net FrameWork SDK中的Socket类的功能是非常强大的,要十分详细的介绍它,非一篇文章所能达到,本文所窥探的也只是其中的很小的一部分。但本文中介绍的二个示例在功能上虽不复杂,但在结构上却非常典型,Socket类的其他方面的应用在结构上大都也是如此。
在上面介绍的内容中,不仅介绍在Visual C#实现端口侦听、网络连接申请、数据发送、数据接收的具体方法,还介绍了在使用Visual C#实现网络功能是所必然要涉及到的如线程创建、线程销毁、资源回收和利用控制码控制程序运行状态等的实现方法。了解并掌握这些对我们编写功能更强、结构更复杂的网络应用程序是非常有帮助的。
最后要和诸位朋友谈一点小体会,就是在编写网络应用程序时,要非常细心,对应用程序在执行的各个环节都要考虑到位,因为在网络中会出现很多意想不到的问题,就是网络状态非常良好,也存在很多使用者方面的问题。如果在编写的程序中缺乏对这些意外的处理,就可能会导致整个应用程序出错,甚至崩溃。
本文转自
http://study.qqcf.com/web/224/23993.htm
7.在Form1.cs中的Main函数之后,添加下列代码,下列代码的作用是定义过程“Listen”,此过程的功能是监听“8000”端口号,接收网络中连接请求,建立连接,并获取接收数据时使用的Socket实例,并以Socket实例来接收客户机程序发送来的数据。并根据客户机发送来控制码来断开网络连接,释放资源:
{
try
{
tlTcpListen = new TcpListener ( port ) ;
//以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 = "已经连接!" ;
//循环侦听
while ( blistener )
{
string sTime = DateTime.Now.ToShortTimeString ( ) ;
//获取接收数据时的时间
Byte [ ] byRead =new Byte [ 80 ] ;
int iRead = stRead.ReceiveFrom
( byRead , ref tempRemoteEP ) ;
//获得接收的字节数目
Byte [ ] byText = new Byte [ iRead ] ;
//并根据接收到的字节数目来定义字节数组
Array.Copy ( byRead , 0 , byText , 0 , iRead ) ;
string sTemp = System.Text.Encoding.Default.
GetString ( byText ) ;
//判断是否为断开连接控制码
if ( sTemp.Trim ( ) == "STOP" )
{
stRead.Close ( ) ;
tlTcpListen.Stop ( ) ;
//关闭侦听
statusBar1.Text = "连接已经关闭!" ;
thThreadRead.Abort ( ) ;
//中止线程
return ;
}
else
listBox1.Items.Add ( sTime + ""+ sTemp ) ;
} catch ( System.Security.SecurityException )
{
MessageBox.Show ( "侦听失败!" , "错误" ) ;
}
}
8.用下列代码替换Form1.cs中的button1组件的Click事件对应的处理代码,下面代码是以刚刚定义“Listen”过程来初始化线程实例thThreadRead,并启动这个线程:
private void button1_Click ( object sender , System.EventArgs e )
{
thThreadRead = new Thread ( new ThreadStart ( Listen ) ) ;
//以Listen过程来初始化Thread实例
thThreadRead.Start ( ) ;
//启动线程
button1.Enabled = false ;
}
至此,在保存上述的所有修改步骤之后。一个基于TCP协议的、利用Socket接收端程序的就完成了。图03和图04分别是上述二个示例运行后的界面
图03:【利用Socket来传送数据】的运行界面
图04:【利用Socket来接收数据】的运行界面
六.总结:
.Net FrameWork SDK中的Socket类的功能是非常强大的,要十分详细的介绍它,非一篇文章所能达到,本文所窥探的也只是其中的很小的一部分。但本文中介绍的二个示例在功能上虽不复杂,但在结构上却非常典型,Socket类的其他方面的应用在结构上大都也是如此。
在上面介绍的内容中,不仅介绍在Visual C#实现端口侦听、网络连接申请、数据发送、数据接收的具体方法,还介绍了在使用Visual C#实现网络功能是所必然要涉及到的如线程创建、线程销毁、资源回收和利用控制码控制程序运行状态等的实现方法。了解并掌握这些对我们编写功能更强、结构更复杂的网络应用程序是非常有帮助的。
最后要和诸位朋友谈一点小体会,就是在编写网络应用程序时,要非常细心,对应用程序在执行的各个环节都要考虑到位,因为在网络中会出现很多意想不到的问题,就是网络状态非常良好,也存在很多使用者方面的问题。如果在编写的程序中缺乏对这些意外的处理,就可能会导致整个应用程序出错,甚至崩溃。
本文转自
http://study.qqcf.com/web/224/23993.htm
- VisualC#中托管Socket的实现方法(二) (2)
- VisualC#中托管Socket的实现方法(二)
- Visual C#中托管Socket的实现方法(二) (1)
- C#托管Socket的实现方法(2)
- Visual C#托管Socket的实现方法(一) (2)
- C#托管Socket的实现方法(2)
- Visual C#托管Socket的实现方法(转载)
- Visual C#托管Socket的实现方法(一) (1)
- Visual C#托管Socket的实现方法(一) (3)
- C#托管Socket的实现方法(1)
- C#托管Socket的实现方法(1)
- C#托管Socket的实现方法(3)
- C#托管Socket的实现方法
- C#托管Socket的实现方法
- C#托管Socket的实现方法
- C#托管Socket的实现方法
- Visual C#托管Socket的实现方法(一)
- Visual C#托管Socket的实现方法(转载的他人的文章,好好收藏吧!)
- 用Visual C#实现POP3邮件接收程序
- 用C#的Raw Socket实现网络封包监视
- 利用Visual C#开发一个媒体播放器
- 多线程在Visual C#网络编程中的应用(1)
- 用C#实现木马程序
- VisualC#中托管Socket的实现方法(二) (2)
- Visual C#.Net网络程序开发-Tcp篇(1)
- Visual C#托管Socket的实现方法(一) (3)
- 在Visual C#中使用XML指南之读取XML
- 用C#设计在局域网发送短信的程序
- 用Visual C#实现P2P应用程序
- c#高性能在WEB端产生验证图片
- C# Builder构建Web服务和客户端
- 用C# Builder实现文件下载程序