<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
本文範例為大家分享了vue + element ui實現錨點定位的具體程式碼,供大家參考,具體內容如下
通訊端(socket)是通訊的基石,用於描述IP地址和埠,是一個通訊鏈的控制程式碼,可以用來實現不同虛擬機器器或不同計算機之間的通訊,是支援TCP/IP協定的網路通訊的基本操作單元。它是網路通訊過程中端點的抽象表示,包含進行網路通訊必須的五種資訊:連線使用的協定,本地主機的IP地址,本地程序的協定埠,遠地主機的IP地址,遠地程序的協定埠。
應用層通過傳輸層進行資料通訊時,TCP會遇到同時為多個應用程式程序提供並行服務的問題。多個TCP連線或多個應用程式程序可能需要通過同一個 TCP協定埠傳輸資料。為了區別不同的應用程式程序和連線,許多計算機作業系統為應用程式與TCP/IP協定互動提供了通訊端(Socket)介面。應 用層可以和傳輸層通過Socket介面,區分來自不同應用程式程序或網路連線的通訊,實現資料傳輸的並行服務。
建立Socket連線至少需要一對通訊端,其中一個執行於使用者端,稱為ClientSocket ,另一個執行於伺服器端,稱為ServerSocket 。
通訊端之間的連線過程分為三個步驟:伺服器監聽,使用者端請求,連線確認。
1、伺服器監聽:伺服器端通訊端並不定位具體的使用者端通訊端,而是處於等待連線的狀態,實時監控網路狀態,等待使用者端的連線請求
2、使用者端請求:指使用者端的通訊端提出連線請求,要連線的目標是伺服器端的通訊端。為此,使用者端的通訊端必須首先描述它要連線的伺服器的通訊端,指出伺服器端通訊端的地址和埠號,然後就向伺服器端通訊端提出連線請求。
3、連線確認:當伺服器端通訊端監聽到或者說接收到使用者端通訊端的連線請求時,就響應使用者端通訊端的請求,建立一個新的執行緒,把伺服器端通訊端的描述發給客戶 端,一旦使用者端確認了此描述,雙方就正式建立連線。而伺服器端通訊端繼續處於監聽狀態,繼續接收其他使用者端通訊端的連線請求。
建立Socket連線時,可以指定使用的傳輸層協定,Socket可以支援不同的傳輸層協定(TCP或UDP),當使用TCP協定進行連線時,該Socket連線就是一個TCP連線。
socket通訊:分為同步和非同步通訊,通訊兩端分別為使用者端(Client)和伺服器(Server),,本文簡單介紹一下同步通訊及案例
聊天室案例 伺服器端
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.Net; using System.Net.Sockets; using System.Threading; namespace 伺服器 { public partial class Form1 : Form { public Form1() { InitializeComponent(); //在多執行緒程式設計中,如果需要使用大到主執行緒需要進行檢查取消 CheckForIllegalCrossThreadCalls = false; } IDictionary<string, Socket> clientList = new Dictionary<string, Socket>(); private void button1_Click(object sender, EventArgs e) { Thread th = new Thread(StartSever); th.IsBackground = true; th.Start(); } void StartSever() { //1.建立伺服器端電話 Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP); //2.建立手機卡 IPAddress ip = IPAddress.Parse(txtIP.Text); //把ip和埠轉化為IPEndPoint範例 IPEndPoint endpoint = new IPEndPoint(ip, int.Parse(txtPort.Text)); //3.將電話卡插入到電話中,繫結埠 server.Bind(endpoint); //4.開始監聽電話 server.Listen(20); listMsg.Items.Add("伺服器已成功開啟"); //5.等待接電話 while (true) { //接收接入的一個使用者端 Socket connectClient = server.Accept(); if (connectClient != null) { string infor = connectClient.RemoteEndPoint.ToString(); clientList.Add(infor, connectClient); listMsg.Items.Add(infor + "加入伺服器"); string msg =infor+"已成功進入聊天室"; SendMsg(msg); Thread thread = new Thread(ReciveMsg); thread.IsBackground = true; thread.Start(connectClient); } } } void ReciveMsg(object o) { Socket client = o as Socket; while (true) { try { byte[] arrMsg = new byte[1024 * 1024]; int length = client.Receive(arrMsg); if (length > 0) { string recMsg = Encoding.UTF8.GetString(arrMsg, 0, length); IPEndPoint endpoint = client.RemoteEndPoint as IPEndPoint; listMsg.Items.Add(DateTime.Now + "[" + endpoint.Port.ToString() + "]" + recMsg); SendMsg("[" + endpoint.Port.ToString() + "]" + recMsg); } } catch (Exception) { client.Close(); clientList.Remove(client.RemoteEndPoint.ToString()); } } } private void label1_Click(object sender, EventArgs e) { string ip = IPAddress.Any.ToString(); txtIP.Text = ip; } void SendMsg(string str) { foreach (var item in clientList) { byte[] arrMsg = Encoding.UTF8.GetBytes(str); item.Value.Send(arrMsg); } } private void button2_Click(object sender, EventArgs e) { if (txtMsg.Text!="") { SendMsg(txtMsg.Text); } } } }
使用者端
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.Net; using System.Net.Sockets; using System.Threading; namespace 伺服器2._12 { public partial class Form1 : Form { public Form1() { InitializeComponent(); CheckForIllegalCrossThreadCalls = false; } Socket Client; private void button1_Click(object sender, EventArgs e) { //建立伺服器端電話 Client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP); //建立手機卡 IPAddress ip = IPAddress.Parse(txtIP.Text); IPEndPoint endinput = new IPEndPoint(ip, int.Parse(txtport.Text)); Client.Connect(endinput); Thread th = new Thread(ReciveMsg); th.IsBackground = true; th.Start(Client); } void ReciveMsg(object o) { Socket client = o as Socket; //5.等待接電話 while (true) { byte[] arrlist = new byte[1024*1024]; int length = client.Receive(arrlist); string msg = DateTime.Now + Encoding.UTF8.GetString(arrlist,0,length); listmsg.Items.Add(msg); } } private void button2_Click(object sender, EventArgs e) { if (txtinput.Text!=null) { SendMsg(txtinput.Text); } } void SendMsg(string msg) { byte[] arrMsg = Encoding.UTF8.GetBytes(msg); Client.Send(arrMsg); } } }
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45