日期:2014-05-17  浏览次数:20752 次

(接上贴)c# 在 socket通信中,多客户端与一个服务器端异步通信时,传图片没有问题,但两台客户端同时要求传视频会卡死,怀疑是数据发送与接收的问题,求赐教~
本帖最后由 u010684484 于 2013-07-15 12:53:49 编辑
(接上一帖)

小弟新人,初来报道,求各位大神指导~~

最近在做一个课设,是有关C#中socket异步通信的,要求两台以上客户端向服务器端请求传送图片和视频信息,服务器端在接到请求后分别向每个客户端发送它们需要的信息,经调试,已解决连接问题,但在传输时却发现,两台客户端同时要求传视频时会出现客户端卡死的现象,而主机仍在传送,客户端得到的图片应该为顺序排列下来的,却在卡死的位置处的图片连同后面传来的图片接到了一个图片中,产生了一个很大的图片(一个上兆的图片,按理一张应为十几K)。故猜测:客户端接收数据出了问题,我们用的是MemoryStream来接受数据,但网上说socket通信中主要用NetworkStream来接受数据,故请教各位大牛,问题是不是出在这里??

附上server端发送数据代码:


        public void SendFile(Socket s, string filename)
        {
            FileInfo fi = new FileInfo(filename);
            byte[] len = BitConverter.GetBytes(fi.Length);
            //首先把文件长度发送过去
            s.BeginSendFile(filename,len,null,TransmitFileOptions.UseDefaultWorkerThread,new AsyncCallback(SendFileCallback),null);
        }
        
        public void SendFileCallback(IAsyncResult iar)
        {
             clientSocket.EndSendFile(iar);
            lstServer.Items.Add(DateTime.Now + "The pic\"" + path + "\" has been SENT....");
        }


客户端接受数据代码:

 public void BeginReceive()//调用此函数 接收文件的开始工作
        {
            byte[] buffer = new byte[8];
            //由于long占8位字节,所以先获取前8位字节数据
            IAsyncResult iar = client.BeginReceive(
                buffer,
                0,
                buffer.Length,
                SocketFlags.None,
                null,