国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

TCP 同步傳輸:客戶端發送,服務器段接收

2019-11-17 03:06:22
字體:
來源:轉載
供稿:網友

TCP 同步傳輸:客戶端發送,服務器段接收

1、服務器端程序

  可以在TcpClient上調用GetStream()方法來獲的鏈接到遠程計算機的網絡流NetworkStream。當在客戶端調用時,他獲的鏈接服務器端的流;當在服務器端調用時,他獲得鏈接客戶端的流。

  

class PRogram    {        static void Main(string[] args)        {            const int BufferSize = 8192;//緩存大小            Console.WriteLine("server is running ...");            ipAddress ip = new IPAddress(new byte[] { 192, 168, 1, 102 });//IP            TcpListener listener = new TcpListener(ip, 8500);            listener.Start();//開始偵聽            Console.WriteLine("start listener ...");                    //獲取一個鏈接中斷方法            TcpClient remoteclient = listener.AcceptTcpClient();            //打印鏈接到客戶端的信息            Console.WriteLine("client connected ! Local:{0}<-- Client:{1}", remoteclient.Client.LocalEndPoint, remoteclient.Client.RemoteEndPoint);                   //獲取流,并寫入Buffer中            NetworkStream streamToClient = remoteclient.GetStream();            byte[] buffer = new byte[BufferSize];            int bytesRead = streamToClient.Read(buffer, 0, BufferSize);            //獲得請求字符串            string msg = Encoding.Unicode.GetString(buffer, 0, bytesRead);            Console.WriteLine("Received:{0}[{1}bytes]", msg, bytesRead);            Console.WriteLine("/n/n輸入/"Q/"鍵退出。");            ConsoleKey key;            do            {                key = Console.ReadKey(true).Key;            } while (key != ConsoleKey.Q);        }    }
View Code

  如果傳遞的數據字節比較大,如圖片、音頻等,則采用“分次讀取然后轉存”的方式,代碼如下:

//獲取字符串byte [] buffer = new byte[BufferSize];int bytesRead; //讀取的字節數MemoryStream ms =new  MemoryStream();do{     bytesRead = streamToClient.Read(buffer,0,BufferSize);     ms.Write(buffer,0,bytesRead);       }while(bytesRead > 0);buffer = msStream.GetBuffer();string msg = Encoding.Unicode.GetString(buffer);
View Code

2、客戶端程序

  客戶端向服務器發送字符串的代碼與服務器端類似,先獲取鏈接服務器端的流,將字符串保存到buffer緩存中,再寫入流,寫入流的過程就相當于將消息發送到服務器端。

class Program    {        static void Main(string[] args)        {            Console.WriteLine("client is running ...");            TcpClient clint;            try            {                clint = new TcpClient();            //與服務器建立連接                clint.Connect(IPAddress.Parse("192.168.1.102"), 8500);            }            catch (Exception ex)            {                Console.WriteLine(ex.Message);                return;            }         //打印連接到服務器端的信息            Console.WriteLine("client connected ! Local:{0}<-- Client:{1}", clint.Client.LocalEndPoint, clint.Client.RemoteEndPoint);        //要發送的信息            string msg = "hello";            NetworkStream streamToServer = clint.GetStream();            //獲取緩存            byte[] buffer = Encoding.Unicode.GetBytes(msg);            //發送            streamToServer.Write(buffer, 0, buffer.Length);            Console.WriteLine("Sent:{0}", msg);            Console.WriteLine("/n/n輸入/"Q/"鍵退出。");            ConsoleKey key;            do            {                key = Console.ReadKey(true).Key;            } while (key != ConsoleKey.Q);        }    }
View Code

這樣就可以成功的發送和接收一個字符串了,如果想完成一些復雜的不間斷的交互就需要自己做一些調整了。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 宜兰县| 合川市| 无棣县| 视频| 思茅市| 四川省| 蕲春县| 武平县| 廊坊市| 望江县| 辽阳县| 巴林右旗| 广西| 甘肃省| 通许县| 哈尔滨市| 平陆县| 东兴市| 灵寿县| 黔江区| 绥中县| 台山市| 古浪县| 龙游县| 韶山市| 拉孜县| 囊谦县| 娱乐| 黄山市| 静乐县| 福建省| 南投市| 蓝山县| 柘荣县| 盐城市| 乌鲁木齐市| 台北县| 霍州市| 柯坪县| 海兴县| 南京市|