C# Sever和Client的傳收檔不完整 |
尚未結案
|
gdogway
一般會員 發表:2 回覆:0 積分:0 註冊:2010-07-15 發送簡訊給我 |
各位大大好 小的因為初接觸網路程式的相關設計
遭遇了下面的問題 苦無解決辦法 在此發文 希望各位大大能幫忙和指教!! 小的最近因專題需要 用C#寫了Server和Client的主控台應用程式 主要目的是要利用這兩個程式 在之間傳送約莫在500kb以下的圖檔 但困擾我的是....在自己電腦做本機測試時 也就是Client端的IP輸入的是127.0.0.1 Port則是我自己所設的3838 Server和Client間的傳收圖檔是沒問題的!! 但將Server的程式放到老師所給的Server上時!!(有固定IP) 卻發生不管如何 Client要將圖檔傳過去都會傳送失敗的情況 發生的情況有:例如一張圖檔為200kb 但Server那邊收到有時為0kb 有時候7Xkb 有時候8Xkb 除了有幾次是直接將Client端連接上數據機出來的第一條線(也就是不透過hub之類的硬體設備) 有成功的完全傳輸外 剩下的幾乎每次Run程式都會出現檔案傳送不完整的情況 以下附上程式碼 以及我所編寫的程式碼檔案給大大們參考 希望大大們能用力的指正我 哪裡有粗心或著觀念有錯誤!! 這問題已經困擾我超久了.... Server的程式碼: [code c#] using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net; using System.Net.Sockets; using System.IO; namespace practiceser1 { class Program { static void Main(string[] args) { IPAddress serverIP = IPAddress.Parse("127.0.0.1"); TcpListener serverlisten=new TcpListener(serverIP,3838); Console.WriteLine("測試Server成功開始"); Console.WriteLine("等待Client連接......"); while (true) { serverlisten.Start(); TcpClient serversocket = serverlisten.AcceptTcpClient(); NetworkStream serverstream = serversocket.GetStream(); Console.WriteLine("連線成功"); Console.WriteLine("開始準收檔案333.jpg....."); byte[] readfile = new byte[1024*15000]; int filelen; filelen=serverstream.Read(readfile, 0,readfile.Length); Console.WriteLine(filelen); FileStream fa = new FileStream("new333.jpg", FileMode.Create, FileAccess.Write); fa.Write(readfile, 0, filelen); serverlisten.Stop(); } } } } [/code] Client的程式碼: [code c#] using System; using System.IO; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net; using System.Net.Sockets; namespace praticecli1 { class Program { static void Main(string[] args) { //輸入Server的IP和Port Console.WriteLine("請輸入Server的IP"); string hostname = Console.ReadLine(); Console.WriteLine("請輸入Server的連接埠"); int connectport = int.Parse(Console.ReadLine()); IPHostEntry hoste = Dns.Resolve(hostname); IPEndPoint server = new IPEndPoint(hoste.AddressList[0], connectport); //建立一個TCP的物件 TcpClient clienttcp = new TcpClient(); //和Server建立連線 clienttcp.Connect(server); Console.WriteLine("連線成功!!"); Console.WriteLine("開始傳檔333.jpg....."); NetworkStream netclientstream = clienttcp.GetStream(); FileStream fs = new FileStream("333.jpg", FileMode.Open); BinaryReader br = new BinaryReader(fs); byte[] sendfile = new byte[fs.Length]; for (int i = 0; i < fs.Length; i ) sendfile[i] = br.ReadByte(); Console.WriteLine(fs.Length); netclientstream.Write(sendfile, 0, (int)fs.Length); clienttcp.Close(); } } } [/code] |
HikaruGo
中階會員 發表:22 回覆:69 積分:88 註冊:2007-12-09 發送簡訊給我 |
多封包問題
server 少處理這塊, REF: http://msdn.microsoft.com/zh-tw/library/system.net.sockets.networkstream.read.aspx |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |