2018-09-21 基於C#的本地伺服器和客服端
阿新 • • 發佈:2018-12-11
基於C#的本地伺服器和客服端
下面來實現本地的伺服器 首先建立一個伺服器專案 1. 程式碼如下
先引用類庫
using System.Net;
using System.Net.Sockets;
在main中實現呼叫 static void Main(string[] args) { SocketClient client = new SocketClient(); while (true) { string msg= Console.ReadLine(); client.Send(msg); } }
再寫一個類SocketClient類來實現非同步 程式碼如下
public const int bufferSize = 8192; TcpClient client; NetworkStream stream; byte[] buffer = new byte[bufferSize]; public SocketClient(TcpClient _client) { client = _client; Console.WriteLine("客服端連結成功" + client.Client.RemoteEndPoint); stream = client.GetStream(); stream.BeginRead(buffer, 0, bufferSize, Read, null); } void Read(IAsyncResult ar) { try { int readCount = stream.EndRead(ar); string msg = Encoding.UTF8.GetString(buffer, 0, readCount); Console.WriteLine("接收到客服端"+client.Client.RemoteEndPoint+"訊息"+msg); lock (client) { Array.Clear(buffer, 0, bufferSize); stream.BeginRead(buffer, 0, bufferSize, Read, null); } } catch (Exception e) { Console.WriteLine(e.ToString()); }
這樣就配置好了伺服器 接下來實現客服端: 在建立一個專案叫做客服端Client
先引用類庫
using System.Net;
using System.Net.Sockets;
在main中實現呼叫 static void Main(string[] args) { SocketClient client = new SocketClient(); while (true) { string msg= Console.ReadLine(); client.Send(msg); } }
也是再寫一個SocketClient類來實現非同步
class SocketClient
{
string ip = "127.0.0.1";
int port = 8500;
TcpClient client;
NetworkStream stream;
public const int bufferSize = 8192;
byte[] buffer = new byte[bufferSize];
public SocketClient()
{
client = new TcpClient();
client.Connect(ip, port);
Console.WriteLine("伺服器連結成功" + client.Client.RemoteEndPoint);
stream = client.GetStream();
stream.BeginRead(buffer, 0, bufferSize, Read, null);
}
void Read(IAsyncResult ar)
{
try
{
int readCount = stream.EndRead(ar);
string msg = Encoding.UTF8.GetString(buffer, 0, readCount);
Console.WriteLine("接收到客服端" + client.Client.RemoteEndPoint + "訊息" + msg);
lock (client)
{
Array.Clear(buffer, 0, bufferSize);
stream.BeginRead(buffer, 0, bufferSize, Read, null);
}
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
}
public void Send(string msg)
{
byte[] bytes = Encoding.UTF8.GetBytes(msg);
stream.Write(bytes, 0, bytes.Length);
}
}
接下來 就是呼叫了 先開啟伺服器 在用Ctrl+F5來開啟多個客服端: 如圖 接著在客服端輸入資訊 會分別得到。
這樣我們就實現了本地的伺服器與客服端的連線。