亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

C# socket通信隨記回顧

系統 2147 0

----tcp(傳輸 控制 協議)是可靠消息:三次握手(發給對方,對方發給自己,證明對方接到消息,在發給對方,說明自己能接到對方消息,這樣就都知道了):tcp:每發送一次消息,對方都會回復,證明接受到了所以是可靠地;包含許多校驗,效率差;

---(UDP:用戶 數據報 協議)數據報文服務:消息發送給對方就完事了,不管你是否接收到;

不可靠,但是效率高;

-----應用層協議:Http,Ftp,Popj SMTp

-----傳輸層:TCP,ICMP,UDP

-----網絡層:IP,ARP ;

socket是應用層和傳輸層之間的交互;

---端口:三類:工人端口、注冊端口、動態私有端口(這些可以用)

---套接字指的是socket;封裝的網絡插口;

----服務端:1創建socket,綁定端口和ip;打開監聽,接受客戶端;

----客戶端:創建socket,鏈接服務器,創建ip端口,進行鏈接;

--服務器端接受科幻段消息時,創建socketProxy對象,占用系統自動分配的

一個端口,發送消息時重新占用新的端口,原來端口繼續監聽;

--說白了,監聽端口收到消息創建新的socket對象,并綁定新的端口進行通信

--這個端口就幫死了,傳遞接受都用這一個端口),

而監聽端口繼續監聽,

? public partial class Form1 : Form

??? {

??????? List<Socket> list = new List<Socket>();

??????? public Form1()

??????? {

??????????? InitializeComponent();

??????? }

??????? private void Form1_Load(object sender, EventArgs e)

??????? {

?

??????? }

?

??????? private void button1_Click(object sender, EventArgs e)

??????? {

??????????? string ip = "192.168.1.1";

??????????? //創建ip地址:

??????????? IPAddress ipAddress = IPAddress.Parse(ip);

??????????? //創建端口

??????????? IPEndPoint ipPoint = new IPEndPoint(ipAddress, 3030);

??????????? //穿點套接字:

??????????? //參數1:尋址方式;參數2:socket傳輸方式:stream tcp方式,Dgram:數據報方式,第三個參數:協議

??????????? Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

??????????? //綁定端口和ip

??????????? s.Bind(ipPoint);

??????????? //開始監聽:(請求最大連接長度),s為委托參數;

??????????? ThreadPool.QueueUserWorkItem(new WaitCallback(Accept), s);

?

??????? }

??????? public void Accept(object obj)

??????? {

??????????? Socket socket = (Socket)obj;

??????????? while (true)

??????????? {

??????????????? //接受客戶端的一個連接創建代理套接字

??????????????? Socket proxys = socket.Accept();

??????????????? //存儲這些通信管道;

??????????????? list.Add(proxys);

??????????????? //獲取套接字端口和ip;

??????????????? // proxys.RemoteEndPoint.ToString();

??????????? ????ThreadPool.QueueUserWorkItem(new WaitCallback(AcceptStarts), proxys);

??????????? }

??????? }

??????? public void AcceptStarts(object obj)

??????? {

??????????? Socket socket = (Socket)obj;

??????????? while (true)

??????????? {

??????????????? //通過判斷異常來判斷,是否客戶端已中斷,來關閉服務端的socket;

??????????????? try

??????????????? {

??????????????????? byte[] buffer = new byte[1024 * 1024];

??????????????????? int realLength = socket.Receive(buffer, 0, buffer.Length, SocketFlags.None);

??????????????????? string strResult = Encoding.Default.GetString(buffer, 0, buffer.Length);

??????????????? }

??????????????? catch

??????????????? {

??????????????????? socket.Close();

??????????????????? //異常已失效斷開的socket;

??????????????????? list.Remove(socket);

??????????????? }

???? ???????}

??????? }

?

??????? private void button2_Click(object sender, EventArgs e)

??????? {

??????????? //發送消息

??????????? foreach (Socket s in list)

??????????? {

??????????????? //防止socket斷開失效;

??????????????? try

??????????????? {

??????????????????? string str = "發送內容";

??????????????????? byte[] bytes = Encoding.Default.GetBytes(str);

??????????????????? s.Send(bytes, SocketFlags.None);

??????????????? }

??????????????? catch

??????????????? {

??????????????????? s.Close();

????? ??????????????//異常已失效斷開的socket;

??????????????????? list.Remove(s);

??????????????? }

??????????? }

??????? }

??? }

--------------------客戶端

?public partial class 客戶端 : Form

??? {

??????? public Socket CurrentSocket { get; set; }

??????? public 客戶端()

????? ??{

??????????? InitializeComponent();

??????? }

??????? private void button1_Click(object sender, EventArgs e)

??????? {

??????????? Socket socket =null;

??????????? try

??????????? {

??????????????? IPAddress ipAddress = IPAddress.Parse("192.168.1.1");

??????????????? IPEndPoint endpoint = new IPEndPoint(ipAddress, 8080);

??????????????? //創建socket;

??????????????? socket= new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

??????????????? socket.Connect(endpoint);

????????????? ??CurrentSocket = socket;

??????????? }

??????????? catch

??????????? {

??????????????? if (socket != null)

??????????????? {

??????????????????? socket.Dispose();

??????????????? }

??????????? }

??????? }

?

??????? private void button2_Click(object sender, EventArgs e)

??????? {

??????????? byte[] bytes = Encoding.Default.GetBytes("sdfsdfd");

??????????? if (CurrentSocket != null)

??????????? {

??????????????? try

??????????????? {

??????????????????? CurrentSocket.Send(bytes, 0, bytes.Length, 0);

??????????????? }

??????????????? catch

??????????????? {

??????????????????? CurrentSocket.Dispose();

??????????????? }

??????????? }

??????? }

??? }

socket傳遞的數據都是byte[]數組類型;

服務器端通過捕獲異常來知道客戶端關閉連接;

? Encoding.Default.GetBytes();

----503錯誤:訪問人數過多

--------

-------------字節塊拷貝: //字節塊拷貝:

??????????????? byte[] a = new byte[1024];

??????????????? byte[] b = new byte[1025];

??????????????? b[0] =1;//這樣可以說是自定義協議;第一個位代表什么意思;接受時根據第一個字節判斷是傳送的什么數據文件(比如1代表圖片)

??????????????? Buffer.BlockCopy(a, 0, b,1,a.Length);

---魔鬼數字:1代表什么2代表什么,千萬別使用,通常使用枚舉;

C# socket通信隨記回顧


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 日韩欧美在线观看视频一区二区 | 国产精品高清一区二区不卡 | 一级欧美在线的视频 | 国产精品视_精品国产免费 国产精品视频2021 | 国产精品亚洲精品一区二区三区 | 97超视频在线观看 | 亚洲婷婷网 | ww欧美 | 国内欧美一区二区三区 | 久久青草免费线观最新 | 神马手机不卡影院 | 九九视频国产 | 特级aaa毛片 | 色女人久久 | 日本叼嘿 | 成 人 黄 色视频免费播放 | 欧美久久天天综合香蕉伊 | 国产一区二区三区久久 | 欧美日韩国产另类一区二区三区 | 久久久精品视频在线观看 | 成人国产精品一级毛片视频 | 羞羞视频网 | 午夜影院免费 | 国产成人一级片 | 久久网页| 香蕉视频免费在线播放 | 91热久久免费精品99 | 四虎ww| 9久久这里只有精品国产 | 日日碰日日摸日日澡视频播放 | 中文xxx视频 | 91热在线观看精品 | 中国国产一级毛片 | 日日操夜夜摸 | 免费高清一级欧美片在线观看 | 国产农村妇女毛片精品久久久 | 99久久精品费精品国产一区二区 | 色丁香六月 | 99国产精品久久久久久久成人热 | 日日干视频| 91精品免费观看老司机 |