最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Visual C#.Net 網(wǎng)絡(luò)程序開發(fā)-Socket篇

 更新時間:2007年03月09日 00:00:00   作者:  

確定了遠(yuǎn)程設(shè)備的地址并選擇了用于連接的端口后,應(yīng)用程序可以嘗試建立與遠(yuǎn)程設(shè)備的連接。下面的示例使用現(xiàn)有的 IPEndPoint 實例與遠(yuǎn)程設(shè)備連接,并捕獲可能引發(fā)的異常: 

try { 
s.Connect(ipe);//嘗試連接 

//處理參數(shù)為空引用異常 
catch(ArgumentNullException ae) { 
Console.WriteLine("ArgumentNullException : {0}", ae.ToString()); 

//處理操作系統(tǒng)異常 
catch(SocketException se) { 
Console.WriteLine("SocketException : {0}", se.ToString()); 

catch(Exception e) { 
Console.WriteLine("Unexpected exception : {0}", e.ToString()); 



需要知道的是:Socket 類支持兩種基本模式:同步和異步。其區(qū)別在于:在同步模式中,對執(zhí)行網(wǎng)絡(luò)操作的函數(shù)(如 Send 和 Receive)的調(diào)用一直等到操作完成后才將控制返回給調(diào)用程序。在異步模式中,這些調(diào)用立即返回。 

另外,很多時候,Socket編程視情況不同需要在客戶端和服務(wù)器端分別予以實現(xiàn),在客戶端編制應(yīng)用程序向服務(wù)端指定端口發(fā)送請求,同時編制服務(wù)端應(yīng)用程序處理該請求,這個過程在上面的闡述中已經(jīng)提及;當(dāng)然,并非所有的Socket編程都需要你嚴(yán)格編寫這兩端程序;視應(yīng)用情況不同,你可以在客戶端構(gòu)造出請求字符串,服務(wù)器相應(yīng)端口捕獲這個請求,交由其公用服務(wù)程序進(jìn)行處理。以下事例語句中的字符串就向遠(yuǎn)程主機(jī)提出頁面請求: 

string Get = "GET / HTTP/1.1\r\nHost: " + server + "\r\nConnection: Close\r\n\r\n"; 


遠(yuǎn)程主機(jī)指定端口接受到這一請求后,就可利用其公用服務(wù)程序進(jìn)行處理而不需要另行編制服務(wù)器端應(yīng)用程序。 

綜合運(yùn)用以上闡述的使用Visual C#進(jìn)行Socket網(wǎng)絡(luò)程序開發(fā)的知識,下面的程序段完整地實現(xiàn)了Web頁面下載功能。用戶只需在窗體上輸入遠(yuǎn)程主機(jī)名(Dns 主機(jī)名或以點(diǎn)分隔的四部分表示法格式的 IP 地址)和預(yù)保存的本地文件名,并利用專門提供Http服務(wù)的80端口,就可以獲取遠(yuǎn)程主機(jī)頁面并保存在本地機(jī)指定文件中。如果保存格式是.htm格式,你就可以在Internet瀏覽器中打開該頁面。適當(dāng)添加代碼,你甚至可以實現(xiàn)一個簡單的瀏覽器程序。 


實現(xiàn)此功能的主要源代碼如下: 

//"開始"按鈕事件 
private void button1_Click(object sender, System.EventArgs e) { 
//取得預(yù)保存的文件名 
string fileName=textBox3.Text.Trim(); 
//遠(yuǎn)程主機(jī) 
string hostName=textBox1.Text.Trim(); 
//端口 
int port=Int32.Parse(textBox2.Text.Trim()); 
//得到主機(jī)信息 
IPHostEntry ipInfo=Dns.GetHostByName(hostName); 
//取得IPAddress[] 
IPAddress[] ipAddr=ipInfo.AddressList; 
//得到ip 
IPAddress ip=ipAddr[0]; 
//組合出遠(yuǎn)程終結(jié)點(diǎn) 
IPEndPoint hostEP=new IPEndPoint(ip,port); 
//創(chuàng)建Socket 實例 
Socket socket=new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp); 
try 

//嘗試連接 
socket.Connect(hostEP); 

catch(Exception se) 

MessageBox.Show("連接錯誤"+se.Message,"提示信息 
,MessageBoxButtons.RetryCancel,MessageBoxIcon.Information); 

//發(fā)送給遠(yuǎn)程主機(jī)的請求內(nèi)容串 
string sendStr="GET / HTTP/1.1\r\nHost: " + hostName + 
"\r\nConnection: Close\r\n\r\n"; 
//創(chuàng)建bytes字節(jié)數(shù)組以轉(zhuǎn)換發(fā)送串 
byte[] bytesSendStr=new byte[1024]; 
//將發(fā)送內(nèi)容字符串轉(zhuǎn)換成字節(jié)byte數(shù)組 
bytesSendStr=Encoding.ASCII.GetBytes(sendStr); 
try 

//向主機(jī)發(fā)送請求 
socket.Send(bytesSendStr,bytesSendStr.Length,0); 

catch(Exception ce) 

MessageBox.Show("發(fā)送錯誤:"+ce.Message,"提示信息 
,MessageBoxButtons.RetryCancel,MessageBoxIcon.Information); 

//聲明接收返回內(nèi)容的字符串 
string recvStr=""; 
//聲明字節(jié)數(shù)組,一次接收數(shù)據(jù)的長度為1024字節(jié) 
byte[] recvBytes=new byte[1024]; 
//返回實際接收內(nèi)容的字節(jié)數(shù) 
int bytes=0; 
//循環(huán)讀取,直到接收完所有數(shù)據(jù) 
while(true) 

bytes=socket.Receive(recvBytes,recvBytes.Length,0); 
//讀取完成后退出循環(huán) 
if(bytes<=0) 
break; 
//將讀取的字節(jié)數(shù)轉(zhuǎn)換為字符串 
recvStr+=Encoding.ASCII.GetString(recvBytes,0,bytes); 

//將所讀取的字符串轉(zhuǎn)換為字節(jié)數(shù)組 
byte[] content=Encoding.ASCII.GetBytes(recvStr); 
try 

//創(chuàng)建文件流對象實例 
FileStream fs=new FileStream(fileName,FileMode.OpenOrCreate,FileAccess.ReadWrite); 
//寫入文件 
fs.Write(content,0,content.Length); 

catch(Exception fe) 

MessageBox.Show("文件創(chuàng)建/寫入錯誤:"+fe.Message,"提示信息",MessageBoxButtons.RetryCancel,MessageBoxIcon.Information); 

//禁用Socket 
socket.Shutdown(SocketShutdown.Both); 
//關(guān)閉Socket 
socket.Close(); 




程序在WindowsXP中文版、.Net Frameworkd 中文正式版、Visual Studio.Net中文正式版下調(diào)試通過 


關(guān)于作者 

宋華,96年畢業(yè)于承德石油學(xué)院電子與電氣系計算機(jī)應(yīng)用專業(yè),同年進(jìn)入中國石油天然氣集團(tuán)公司吐哈油田工作,一直從事網(wǎng)絡(luò)規(guī)劃與建設(shè)、網(wǎng)站架構(gòu)與設(shè)計,現(xiàn)專門從事Internet應(yīng)用程序開發(fā)及Windows應(yīng)用程序開發(fā)。 

相關(guān)文章

最新評論

汶上县| 运城市| 锡林浩特市| 杭锦后旗| 沛县| 丘北县| 吉木乃县| 务川| 长治市| 永康市| 玛纳斯县| 大连市| 庆城县| 湘乡市| 河津市| 喀喇沁旗| 富民县| 昆山市| 吉首市| 敦化市| 海口市| 五家渠市| 电白县| 镇坪县| 廊坊市| 锡林浩特市| 清镇市| 英吉沙县| 甘泉县| 临漳县| 长春市| 绥江县| 天水市| 陕西省| 文化| 乐业县| 红安县| 澳门| 元氏县| 肇源县| 阿拉善左旗|