.Net之美讀書筆記10(網絡編程一)
阿新 • • 發佈:2018-01-19
字符 命令 port ace 應用 獲得 簡單 進程 ssa
網絡編程(Socket)
這裏對網絡編程做下簡單的整理,填補下自己這方面的知識空白。如果想了解請參考張子陽的.Net之美.
***
概念講述
- TCP:面向連接的傳輸協議(網絡協議的一種)
- 遠程主機: 跨進程訪問即為遠程訪問
套接字: 傳輸層與應用層的紐帶,可使應用層編程不用關心傳輸層
服務器與客戶端鏈接
服務端開啟監聽服務,客戶端鏈接服務端。新建兩個控制臺程序Server/Client。
Server:static void Main(string[] args) { Console.WriteLine("Server is running ..."); IPAddress ip = IPAddress.Parse("127.0.0.1"); int port = 8500; TcpListener listener = new TcpListener(ip, port); listener.Start(); Console.WriteLine("\n\n Enter \"Q\" exit."); ConsoleKey key; do { key = Console.ReadKey(true).Key; } while (key != ConsoleKey.Q); }
Client:
static void Main(string[] args) { Console.WriteLine("Client Running"); TcpClient client = new TcpClient(); IPAddress serverIp = IPAddress.Parse("127.0.0.1"); int serverPort = 8500; try { client.Connect(serverIp, serverPort); } catch (Exception ex) { Console.WriteLine(ex.Message); return; } Console.WriteLine("Server Connected!{0} --> {1}", client.Client.LocalEndPoint, client.Client.RemoteEndPoint); Console.WriteLine("\n\n Enter \"Q\" exit."); ConsoleKey key; do { key = Console.ReadKey(true).Key; } while (key != ConsoleKey.Q); }
命令行運行
netstat -a
查看端口連接狀態服務端獲取客戶端鏈接
AcceptTcpClient()
為阻塞方法,調用後線程等待客戶端鏈接
Server:static void Main(string[] args) { Console.WriteLine("Server is running ..."); IPAddress ip = IPAddress.Parse("127.0.0.1"); int port = 8500; TcpListener listener = new TcpListener(ip, port); listener.Start(); Console.WriteLine("Start Listening ..."); //目的獲取多個客戶端信息 while(true) { try { //獲取一個連接,中斷方法(等待客戶端的鏈接) TcpClient remoteClient = listener.AcceptTcpClient(); //打印鏈接到的客戶端信息 Console.WriteLine("Client Connected!{0}<-{1}", remoteClient.Client.LocalEndPoint, remoteClient.Client.RemoteEndPoint); } catch (Exception ex) { Console.WriteLine("Error:" + ex.Message); } } }
客戶端發送信息服務端接受
Server:
static void Main(string[] args) { int BufferSize = 8192; Console.WriteLine("Server is running ..."); IPAddress ip = IPAddress.Parse("127.0.0.1"); int port = 8500; TcpListener listener = new TcpListener(ip, port); listener.Start(); Console.WriteLine("Start Listening ..."); //目的獲取多個客戶端信息 while(true) { try { //獲取一個連接,中斷方法(等待客戶端的鏈接) TcpClient remoteClient = listener.AcceptTcpClient(); //打印鏈接到的客戶端信息 Console.WriteLine("Client Connected!{0}<-{1}", remoteClient.Client.LocalEndPoint, remoteClient.Client.RemoteEndPoint); //獲得流並寫入buffer中 NetworkStream streamToClient = remoteClient.GetStream(); byte[] buffer = new byte[BufferSize]; int bytesRead = streamToClient.Read(buffer, 0, buffer.Length); Console.WriteLine("Reading data,{0}bytes",bytesRead); //獲得請求的字符串 string msg = Encoding.Unicode.GetString(buffer, 0, bytesRead); Console.WriteLine("Received:{0}",msg); } catch (Exception ex) { Console.WriteLine("Error:" + ex.Message); } } }
Client:
static void Main(string[] args) { Console.WriteLine("Client Running"); TcpClient client = new TcpClient(); IPAddress serverIp = IPAddress.Parse("127.0.0.1"); int serverPort = 8500; try { client.Connect(serverIp, serverPort); } catch (Exception ex) { Console.WriteLine(ex.Message); return; } Console.WriteLine("Server Connected!{0} --> {1}", client.Client.LocalEndPoint, client.Client.RemoteEndPoint); string msg = "\"Welcome To TraceFact.Net\""; NetworkStream streamToServer = client.GetStream(); byte[] buffer = Encoding.Unicode.GetBytes(msg); streamToServer.Write(buffer, 0, buffer.Length); Console.WriteLine("Sent:{0}",msg); Console.WriteLine("\n\n Enter \"Q\" exit."); ConsoleKey key; do { key = Console.ReadKey(true).Key; } while (key != ConsoleKey.Q); }
.Net之美讀書筆記10(網絡編程一)