做爰高潮a片〈毛片〉,尤物av天堂一区二区在线观看,一本久久A久久精品VR综合,添女人荫蒂全部过程av

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當前位置: 首頁 - 科技 - 知識百科 - 正文

C#利用服務器實現客戶端之間通信

來源:懂視網 責編:小采 時間:2020-11-27 22:36:36
文檔

C#利用服務器實現客戶端之間通信

C#利用服務器實現客戶端之間通信:先來講述下我自己對于整個Socket通信過程的理解,畢竟初學,說錯見諒,知道錯了會改正~ 首先在服務端新建一個serverSocket,對其進行初始化(一般包含AddressFamily:IP地址類型,SocketType:Socket傳輸數據方式,ProtoType:傳輸協議); 接
推薦度:
導讀C#利用服務器實現客戶端之間通信:先來講述下我自己對于整個Socket通信過程的理解,畢竟初學,說錯見諒,知道錯了會改正~ 首先在服務端新建一個serverSocket,對其進行初始化(一般包含AddressFamily:IP地址類型,SocketType:Socket傳輸數據方式,ProtoType:傳輸協議); 接

先來講述下我自己對于整個Socket通信過程的理解,畢竟初學,說錯見諒,知道錯了會改正~ 

首先在服務端新建一個serverSocket,對其進行初始化(一般包含AddressFamily:IP地址類型,SocketType:Socket傳輸數據方式,ProtoType:傳輸協議); 

接著我們要設置server端要綁定的IP:port;然后開始監聽,并設置最多同時監聽多少個Client.

這時,服務端就在等待狀態,直到某一個Client連接到這個ip:port上,這時serverSocket.Accept()工作,獲得這個連接。(此時的連接是有地址信息的哦!記得保存) 

獲得連接之后,server就可以和這個Client進行通信了,當加入第二個Client(我們稱其為ClientB)時,Server接收到ClientB的消息,可以將這個消息轉發給前一個Client(我們稱其為ClientA),當受到ClientA的消息,也可以轉發給ClientB。這樣就實現了Clients之間的通信了。(重點在保存連接信息!!)

那么現在貼上代碼講解:

Server端代碼 

namespace SocketServer
{
 class Program
 {
 private static byte[] result = new byte[1024];
 
 static Socket serverSocket;
 private static string client;
 private static Socket clientSocket;
 //我這里存了兩個Client,因為自己電腦開了兩個Client,不會有多的
 //理論上應該開一個Socket[]來保存信息,最好用一個二元組將client的信息和連接綁定起來
 //這樣就可以實現斷開連接后下次登陸還是可以識別是這個Client
 private static Socket clientSocketA=null;
 private static Socket clientSocketB=null;
 
 static void Main(string[] args)
 {
 Program.SetPort(8885);
 }
 private static void SetPort(int port)
 {
 IPAddress ip = IPAddress.Parse("127.0.0.1");//set ip
 serverSocket = new Socket(AddressFamily.InterNetwork,
 SocketType.Stream, ProtocolType.Tcp);//initialize
 serverSocket.Bind(new IPEndPoint(ip, port));//bind
 serverSocket.Listen(10);
 //進入監聽狀態
 Console.WriteLine("監聽{0}成功", serverSocket.LocalEndPoint.ToString());
 //開啟一個線程來監聽客戶端連接
 Thread myThread = new Thread(ListenClientConnect);
 myThread.Start();
 Console.ReadLine();

 }
 /// <summary>
 /// 監聽客戶端連接
 /// </summary>
 private static void ListenClientConnect()
 {
 while (true)
 {
 //Client連接上后 得到這個連接
 clientSocket = serverSocket.Accept();

 //這里我因為只有兩個Client,所以就簡單寫了
 if (clientSocketA == null)
 {
 clientSocketA = clientSocket;
 }
 else if (clientSocketB == null)
 {
 clientSocketB = clientSocket;
 }
 else
 {
 //當其中一個斷開了,又重新連接時,需要再次保存連接
 if (clientSocketB.IsBound)
 {
 clientSocketA = clientSocketB;
 clientSocketB = clientSocket;
 }
 else
 {
 clientSocketB = clientSocketA;
 clientSocketA = clientSocket;
 }
 
 }
 clientSocket.Send(Encoding.ASCII.GetBytes("say hello"));
 //開個線程接收Client信息
 Thread receivedThread = new Thread(ReceiveMessage);
 receivedThread.Start(clientSocket);

 }
 }
 
 private static void ReceiveMessage(object clientSocket)
 {
 Socket myClientSocket = (Socket) clientSocket;
 
 while (true)
 {
 try
 {
 int revceiveNumber = myClientSocket.Receive(result);
 //Console.WriteLine("接受客戶端{0}消息{1}", myClientSocket.RemoteEndPoint.ToString()
 // , Encoding.ASCII.GetString(result, 0, revceiveNumber));
 Console.WriteLine(Encoding.ASCII.GetString(result, 0, revceiveNumber));
 if (myClientSocket == clientSocketA)
 {
 Console.WriteLine("receive from A");
 if (clientSocketB!=null&&clientSocketB.IsBound)
 {
 Console.WriteLine("a IS BOUND");
 clientSocketB.Send(result, 0, revceiveNumber, SocketFlags.None);
 }
 else
 {
 myClientSocket.Send(Encoding.ASCII.GetBytes("the people is not online! Send Failed!"));
 Console.WriteLine("對方不在線上,發送失敗!");
 }
 }
 else
 {
 Console.WriteLine("receive from B");
 if (clientSocketA != null && clientSocketA.IsBound)
 {
 Console.WriteLine("a IS BOUND");
 clientSocketA.Send(result, 0, revceiveNumber, SocketFlags.None);
 } 
 else
 {
 myClientSocket.Send(Encoding.ASCII.GetBytes("the people is not online! Send Failed!"));
 Console.WriteLine("對方不在線上,發送失敗!");
 }

 }
 
 }
 catch(Exception ex)
 {
 Console.WriteLine(ex.Message);
 myClientSocket.Shutdown(SocketShutdown.Both);
 myClientSocket.Close();
 break;

 }
 }

 }
 }
}

Client端代碼(因為都差不多 就只貼一個了) 

namespace SocketClient
{
 class Program
 {
 private static byte[] result = new byte[1024];
 private static Socket clientSocket;
 private static void ListenServer()
 {
 while (true)
 {
 result = new byte[1024];
 int receiveLength = clientSocket.Receive(result);
 
 Console.WriteLine("{0}", Encoding.ASCII.GetString(result, 0, receiveLength));
 }
 
 }
 static void Main(string[] args)
 {

 IPAddress ip = IPAddress.Parse("127.0.0.1");
 clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
 try
 {
 clientSocket.Connect(ip, 8885);
 Console.WriteLine("連接成功!");

 }
 catch (Exception e)
 {
 Console.WriteLine("連接失敗!");
 return;
 }
 Thread threadRead = new Thread(ListenServer);
 threadRead.Start();
 

 while(true)
 {
 try
 {
 Thread.Sleep(1000);
 string sendMessage = Console.ReadLine();
 clientSocket.Send(Encoding.ASCII.GetBytes("Sylvia:"+sendMessage));
 
 }
 catch (Exception ex)
 {
 clientSocket.Shutdown(SocketShutdown.Both);
 clientSocket.Close();
 break;
 }

 }
 Console.WriteLine("發送完畢 按回車退出");
 Console.ReadKey();
 }
 }
}

寫的時候要特別注意一下Send信息的時候,注意byte[]的傳輸大小,很容易變成byte[]數組的大小而不是內容的大小。 

這個大家就自己嘗試吧。

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

C#利用服務器實現客戶端之間通信

C#利用服務器實現客戶端之間通信:先來講述下我自己對于整個Socket通信過程的理解,畢竟初學,說錯見諒,知道錯了會改正~ 首先在服務端新建一個serverSocket,對其進行初始化(一般包含AddressFamily:IP地址類型,SocketType:Socket傳輸數據方式,ProtoType:傳輸協議); 接
推薦度:
  • 熱門焦點

最新推薦

猜你喜歡

熱門推薦

專題
Top
主站蜘蛛池模板: 拉孜县| 刚察县| 呼伦贝尔市| 清苑县| 桐庐县| 卓尼县| 霍山县| 大新县| 海原县| 凤城市| 麻城市| 色达县| 武山县| 阳春市| 谢通门县| 鹿泉市| 通化县| 金溪县| 监利县| 昭平县| 旺苍县| 罗甸县| 陕西省| 墨玉县| 黔东| 巴马| 木里| 长阳| 新绛县| 呼和浩特市| 通辽市| 清徐县| 嘉义县| 谢通门县| 湖北省| 宁德市| 瑞安市| 昂仁县| 富阳市| 城固县| 桂平市|