




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、最近也在接觸SOCKET編程,在當今這樣一個網絡時代,很多技術都以網絡為中心在誕生,至少我認為是這樣的,而SOCKET套接字接口,在實現(xiàn)網絡通訊上處于關鍵地位,所以不會SOCKET是不行的。首先,本文主要是針對那些剛接觸SOCKET編程的朋友,如果是高手,就可以不看此文啦,可以去陪陪老婆,比如逛街或看電視.在開始之前,我們需要預習一些基礎知識:什么是SOCKET套接字?SOCKET通常有那幾種數(shù)據(jù)格式?線程的概念?(以上基本知識我就不講了,網上這方面資料很多的,大家找資料看下吧)我要介紹的是一個服務器端+客戶端的聊天系統(tǒng),程序比較簡單,我先把程序運行的界面給大家看下:上面是服務器端運行界面;下
2、面把客戶端界面貼給大家看下:功能比較簡單,服務器的端口號可以在“系統(tǒng)菜單”里面的參數(shù)配置進行修改的??戳松厦娴膱D,下面我們就給大家把代碼貼出來:(因為程序比較簡單,所以本人就沒有去分層啦)服務器端代碼:1usingSystem;2usingSystem.Collections.Generic;3usingSystem.ComponentModel;4usingSystem.Data;5usingSystem.Drawing;6usingSystem.Text;7usingSystem.Windows.Forms;89usingSystem.Net;10usingSystem.Net.Socke
3、ts;11usingSystem.Threading;12usingSystem.Xml;1314namespaceServer1516publicpartialclassServerMain:Form1718publicServerMain()1920InitializeComponent();212223privatevoidServerMain_Load(objectsender,EventArgse)2425this.CmdStar.Enabled=true;26this.CmdStop.Enabled=false;272829privatevoid配置參數(shù)ToolStripMenuI
4、tem_Click(objectsender,EventArgse)3031SetTSet=newSet();32TSet.ShowDialog();333435privatevoid關于ToolStripMenuItem_Click(objectsender,EventArgse)3637AboutTAbout=newAbout();38TAbout.Show();3940/41/獲得XML文件中的端口號42/43/44privateintGetPort()4546try4748XmlDocumentTDoc=newXmlDocument();49TDoc.Load(Settings.xml
5、);50stringTPort=TDoc.GetElementsByTagName(ServerPort)0.InnerXml;51returnConvert.ToInt32(TPort);525354catchreturn6600;/默認是6600555657/聲明將要用到的類58privateIPEndPointServerInfo;/存放服務器的IP和端口信息59privateSocketServerSocket;/服務端運行的SOCKET60privateThreadServerThread;/服務端運行的線程61privateSocketClientSocket;/為客戶端建立的SO
6、CKET連接62privateintClientNumb;/存放客戶端數(shù)量63privatebyteMsgBuffer;/存放消息數(shù)據(jù)6465privatevoidCmdStar_Click(objectsender,EventArgse)6667ServerSocket=newSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);68ServerInfo=newIPEndPoint(IPAddress.Any,this.GetPort();69ServerSocket.Bind(ServerInfo);/將
7、SOCKET接口和IP端口綁定70ServerSocket.Listen(10);/開始監(jiān)聽,并且掛起數(shù)為107172ClientSocket=newSocket65535;/為客戶端提供連接個數(shù)73MsgBuffer=newbyte65535;/消息數(shù)據(jù)大小74ClientNumb=0;/數(shù)量從0開始統(tǒng)計7576ServerThread=newThread(RecieveAccept);/將接受客戶端連接的方法委托給線程77ServerThread.Start();/線程開始運行7879CheckForIllegalCrossThreadCalls=false;/不捕獲對錯誤線程的調用808
8、1this.CmdStar.Enabled=false;82this.CmdStop.Enabled=true;83this.StateMsg.Text=服務正在運行+運行端口:+this.GetPort().ToString();84this.ClientList.Items.Add(服務于+DateTime.Now.ToString()+開始運行.);858687/接受客戶端連接的方法88privatevoidRecieveAccept()8990while(true)9192ClientSocketClientNumb=ServerSocket.Accept();93ClientSock
9、etClientNumb.BeginReceive(MsgBuffer,0,MsgBuffer.Length,0,newAsyncCallback(RecieveCallBack),ClientSocketClientNumb);94this.ClientList.Items.Add(ClientSocketClientNumb.RemoteEndPoint.ToString()+成功連接服務器.);95ClientNumb+;96979899/回發(fā)數(shù)據(jù)給客戶端100privatevoidRecieveCallBack(IAsyncResultAR)101102try103104SocketR
10、Socket=(Socket)AR.AsyncState;105intREnd=RSocket.EndReceive(AR);106for(inti=0;iClientNumb;i+)107108if(ClientSocketi.Connected)109110ClientSocketi.Send(MsgBuffer,0,REnd,0);111112RSocket.BeginReceive(MsgBuffer,0,MsgBuffer.Length,0,newAsyncCallback(RecieveCallBack),RSocket);113114115116catch117118119120
11、privatevoidCmdStop_Click(objectsender,EventArgse)121122ServerThread.Abort();/線程終止123ServerSocket.Close();/關閉SOCKET124125this.CmdStar.Enabled=true;126this.CmdStop.Enabled=false;127this.StateMsg.Text=等待運行;128this.ClientList.Items.Add(服務于+DateTime.Now.ToString()+停止運行.);129130131132133134客戶端代碼:1usingSys
12、tem;2usingSystem.Collections.Generic;3usingSystem.ComponentModel;4usingSystem.Data;5usingSystem.Drawing;6usingSystem.Text;7usingSystem.Windows.Forms;89usingSystem.Net;10usingSystem.Net.Sockets;1112namespaceClient1314publicpartialclassClientMain:Form1516publicClientMain()1718InitializeComponent();192
13、021privateIPEndPointServerInfo;22privateSocketClientSocket;23privateByteMsgBuffer;24privateByteMsgSend;2526privatevoidClientMain_Load(objectsender,EventArgse)2728this.CmdSend.Enabled=false;29this.CmdExit.Enabled=false;3031ClientSocket=newSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolTy
14、pe.Tcp);32MsgBuffer=newByte65535;33MsgSend=newByte65535;34CheckForIllegalCrossThreadCalls=false;3536RandomTRand=newRandom();37this.UserName.Text=用戶+TRand.Next(10000).ToString();383940privatevoidCmdEnter_Click(objectsender,EventArgse)4142ServerInfo=newIPEndPoint(IPAddress.Parse(this.ServerIP.Text),Co
15、nvert.ToInt32(this.ServerPort.Text);4344try4546ClientSocket.Connect(ServerInfo);4748ClientSocket.Send(Encoding.Unicode.GetBytes(用戶:+this.UserName.Text+進入系統(tǒng)!n);4950ClientSocket.BeginReceive(MsgBuffer,0,MsgBuffer.Length,0,newAsyncCallback(ReceiveCallBack),null);5152this.SysMsg.Text+=登錄服務器成功!n;53this.C
16、mdSend.Enabled=true;54this.CmdEnter.Enabled=false;55this.CmdExit.Enabled=true;5657catch5859MessageBox.Show(登錄服務器失敗,請確認服務器是否正常工作!);60616263privatevoidReceiveCallBack(IAsyncResultAR)6465try6667intREnd=ClientSocket.EndReceive(AR);68this.RecieveMsg.AppendText(Encoding.Unicode.GetString(MsgBuffer,0,REnd)
17、;69ClientSocket.BeginReceive(MsgBuffer,0,MsgBuffer.Length,0,newAsyncCallback(ReceiveCallBack),null);707172catch7374MessageBox.Show(已經與服務器斷開連接!);75this.Close();7677787980privatevoidCmdSend_Click(objectsender,EventArgse)8182s(this.UserName.Text+說:n+this.SendMsg.Text+n);83if(ClientSocket.Connected)8485
18、ClientSocket.Send(MsgSend);86this.SendMsg.Text=;8788else8990MessageBox.Show(當前與服務器斷開連接,無法發(fā)送信息!);91929394privatevoidCmdExit_Click(objectsender,EventArgse)9596if(ClientSocket.Connected)9798ClientSocket.Send(Encoding.Unicode.GetBytes(this.UserName.Text+離開了房間!n);99ClientSocket.Shutdown(SocketShutdown.Both);100ClientSocket.Disconnect(false);101102ClientSocket.Close();103104this.CmdSend.Enabled=false;105this.CmdEnter.Enabled=true;106this
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 城市軌道交通智慧運維系統(tǒng)在2025年智慧交通管理中的應用研究報告
- 信托基金份額拆分及贖回操作協(xié)議
- 2025年教育信息化2.0背景下教師跨學科教學能力培養(yǎng)模式創(chuàng)新與優(yōu)化
- 跨平臺廣告內容審核標準執(zhí)行補充協(xié)議
- 城市快遞兼職司機服務外包合同
- 綠色證券投資咨詢公司股權綠色投資合作協(xié)議
- 海鮮水產批發(fā)市場水產養(yǎng)殖產業(yè)聯(lián)盟合作協(xié)議
- 裝配式農房抗震施工安全責任合同
- 商業(yè)地產REITs資產重組及資產托管合作協(xié)議
- 2025年秋季特殊教育教學工作計劃
- 運動員健康證明表
- 語文考試作文格子紙-word文檔
- 家庭護工合同范本
- 手表買賣合同協(xié)議書
- 《錯誤是最好的成長機會》主題班會課課件
- 直接作業(yè)環(huán)節(jié)的“7+1”安全管理制度課件
- 煙花爆竹行業(yè)特種作業(yè)人員安全管理培訓
- 嬰幼兒體格測量胸圍的測量
- 幼兒園故事課件:《胸有成竹》
- 鋰離子電池內阻的影響因素
- 《山西革命文化》課程教學大綱
評論
0/150
提交評論