惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Jina AI
Jina AI
V
Vulnerabilities – Threatpost
Security Latest
Security Latest
AI
AI
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
量子位
H
Help Net Security
Attack and Defense Labs
Attack and Defense Labs
The GitHub Blog
The GitHub Blog
L
LINUX DO - 最新话题
A
Arctic Wolf
博客园_首页
S
Securelist
S
Secure Thoughts
Google DeepMind News
Google DeepMind News
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
T
Tailwind CSS Blog
Apple Machine Learning Research
Apple Machine Learning Research
酷 壳 – CoolShell
酷 壳 – CoolShell
Stack Overflow Blog
Stack Overflow Blog
N
Netflix TechBlog - Medium
Cyberwarzone
Cyberwarzone
小众软件
小众软件
T
Threatpost
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Blog — PlanetScale
Blog — PlanetScale
N
News and Events Feed by Topic
NISL@THU
NISL@THU
Forbes - Security
Forbes - Security
博客园 - 聂微东
F
Fortinet All Blogs
Simon Willison's Weblog
Simon Willison's Weblog
H
Heimdal Security Blog
罗磊的独立博客
S
Security @ Cisco Blogs
B
Blog
T
Troy Hunt's Blog
Engineering at Meta
Engineering at Meta
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
The Hacker News
The Hacker News
The Last Watchdog
The Last Watchdog
Hacker News - Newest:
Hacker News - Newest: "LLM"
I
Intezer
T
Threat Research - Cisco Blogs
C
Cybersecurity and Infrastructure Security Agency CISA
The Cloudflare Blog
S
Schneier on Security
月光博客
月光博客
L
LINUX DO - 热门话题
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org

博客园 - sperp

带有智能完成功能的万能查询分析器的开发心得 共享一下自己使用辅助工具的心得 javascript中如何通过被打开的窗体在opener窗体中添加option选项 数据库建模软件 终于把.Net的大部分开源项目整理出来 静态页面的值传递 Session对象 ASP.NET中使用TreeView控件 协调 Web Services ASP .NET 中的身份验证:.NET 安全性指导 C# Delegate 简介 Visual C#中调用Windows服务初探 C#来创建和读取XML文档 ADO.NET使用经验集 用C#开发Pocket PC数据库应用程序 一个FTP客户端的C#代码 c#编写的PING工具 Visual C#托管Socket的实现方法(二) Visual C#托管Socket的实现方法(一)
Visual C#托管Socket的实现方法(三)
sperp · 2005-11-02 · via 博客园 - sperp

6.在Form1的class代码区中加入下列代码,下列代码的作用是定义全局变量和创建全局使用的实例:

int port = 8000 ;
//定义侦听端口号
private TcpClient tcpc  ;
//对服务器端创建TCP连接
private Socket stSend ;	
//创建发送数据套接字
private bool tcpConnect = false ;
//定义标识符,用以表示TCP连接是否建立

7.用下列代码替换Form1.cs中的button1组件的Click事件对应的处理代码,下列代码的功能是初始化以创建的Socket实例,并向远程终结点提出连接申请,并判断连接是否建立:

private void button1_Click 
( object sender , System.EventArgs e )
{
	//以下代码是判断是否和远程终结点成功连接
	try
	{
		stSend = new Socket ( AddressFamily.InterNetwork , 
                  SocketType.Stream , ProtocolType.Tcp ) ;
		//初始化一个Socket实例
		IPEndPoint tempRemoteIP = new IPEndPoint 
                  ( IPAddress.Parse ( textBox1.Text ) , port ) ;
		//根据IP地址和端口号创建远程终结点
		EndPoint epTemp =  ( EndPoint ) tempRemoteIP ;
		stSend.Connect ( epTemp ) ;
		//连接远程主机的8000端口号
		statusBar1.Text = "成功连接远程计算机!" ;
		tcpConnect = true ;
		button1.Enabled = false  ;
		button2.Enabled = true  ;
	}
	catch ( Exception )
	{
		statusBar1.Text = "目标计算机拒绝连接请求!" ;
	}	
}

8.用下列代码替换Form1.cs中button2组件的Click事件对应的处理代码,下列代码的功能是通过已建立的连接,利用Socket来传送数据到远程主机。

private void button2_Click 
( object sender , System.EventArgs e )
{
	int iLength = textBox2.Text.Length ;
	//获取要发送的数据的长度
	Byte [ ] bySend = new byte [ iLength ] ;
	//根据获取的长度定义一个Byte类型数组
	bySend = System.Text.Encoding.Default.GetBytes 
         ( textBox2.Text  ) ;
	//按照指定编码类型把字符串指定到指定的Byte数组
	int i = stSend.Send  ( bySend ) ;
	//发送数据
	listBox1.Items.Add  ( textBox2.Text  ) ;
}

9.用下列代码替换Form1.cs中“清理所有正在使用的资源。”对应的代码。其作用是在程序退出之前,判断连接状态,如果没有退出,则向远程主机发送控制码“STOP”,用以断开和远程主机的连接,并清除相应资源。所谓控制码就是网络应用程序之间彼此交换信息的一种自定义码子,应用程序通过接收、发送这些码子,可以明确网络应用程序的行为,保证执行的一致性,也就少了很多出错的几率。控制码在编写远程控制方面的应用程序时使用比较多。之所以要有这一步是因为在用Visual C#编写网络应用程序的时候,很多人都遇到这样的情况。当程序退出后,通过Windows的“资源管理器”看到的是进程数目并没有减少。这是因为程序中使用的线程可能并没有有效退出。虽然Thread类中提供了“Abort”方法用以中止进程,但并不能够保证成功退出。因为进程中使用的某些资源并没有回收。可见在某些情况下,依靠Visual C#的垃圾回收器也不能保证完全的回收资源,这时就需要我们自己手动回收资源的。下面就是手动回收资源采用的一种方法:

protected override void Dispose (  bool disposing  )
{
	if  (  tcpConnect  )
	{
		Byte [ ] bySend = new byte [ 4 ] ;
		//根据字符串“STOP”长度来定义Byte数组
		bySend = System.Text.Encoding.
                  Default.GetBytes ( "STOP" ) ;
		int i = stSend.Send  ( bySend ) ;
		//发送控制码
		stSend.Close ( ) ;
		//关闭套接字
	}
	if (  disposing  )
	{
		if  ( components != null ) 
		{
			components.Dispose ( ) ;
		}
	}
	base.Dispose (  disposing  ) ;
}

至此在上述步骤都正确执行后,【利用Socket来传送数据】就全部完成了。
转载自赛迪网