最近研究文件接收,稍微总结一下,以后继承补充:

整完的工程下载址地(源码)

:http://download.csdn.net/detail/zhujinghao09/5313666

序程功能绍介:

服务器: PC

言语 C#

按钮开启serverSocket

private void btnStartServer_Click(object sender, EventArgs e)        {            string strip = tbIP.Text;                  //手动填写IP址地            string strport = tbPort.Text;              //端口号               IPAddress IP;             int Port;             try             {                 if (strip != "" && strport != "")                 {                     IP = IPAddress.Parse(strip);                     Port = Convert.ToInt32(strport);                     this.lIP.Text = IP.ToString();                     this.lport.Text = strport;                 }                 else                               //如果没有填写任何信息,则认默是当地址地和1234端口号                       {                     IP = GetIP();                  //取得当地IP址地                        Port = 1234;                     this.lIP.Text = IP.ToString();                     this.lport.Text = Port.ToString();                 }                 if (IP != null)                     serverFullAddr = new IPEndPoint(IP, Port);                 else                 {                     MessageBox.Show("没有到得确正IP址地!!");                     return;                 }                 server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);                               server.Bind(serverFullAddr);                 lbserverState.Text = "服务器已启动!!";             }             catch(Exception el)             {                 MessageBox.Show(el.Message);                 return;             }            //开启带有参数的听监线程,并把服务器socket传递给线程                ParameterizedThreadStart parstart = new ParameterizedThreadStart(ConnectListen);            Thread thListen = new Thread(parstart);            threadList.Add(thListen);            thListen.Start((object)server);        }

取得 当地IP址地 此段代码直接从网上找到的

public IPAddress GetIP()        {           // string strAddr = "";            IPAddress IP=null;            try            {                string strHostName = System.Net.Dns.GetHostName();                System.Net.IPHostEntry ipEntry = System.Net.Dns.GetHostEntry(strHostName);                foreach (IPAddress _ipaddress in ipEntry.AddressList)                {                    if (_ipaddress.AddressFamily.ToString().ToLower() == "internetwork")                    {                        //strAddr = _ipaddress.ToString();                        IP = _ipaddress;                        break;                    }                }              //  Log.Debug("  IP:" + strAddr);            }            catch (System.Exception e)            {                //Log.Error("  Get IP Address Error:" + e.Message);                MessageBox.Show("没有取得主机的IP!!!");            }            return IP;        }

听监客户端接连线程

private void ConnectListen(object server)        {            Socket serverSocket = (Socket)server;            while (true)                          //环循接听接连            {                serverSocket.Listen(20);                Socket acceptSock = serverSocket.Accept();                byte[] byteArray = new byte[50];                acceptSock.Receive(byteArray);//接收数据                             //接收客户端发送来过的用户名 认默50个字节,处置到得字符串                //将字节数组转成字符串                string strRec = System.Text.Encoding.Default.GetString(byteArray);     //C# byte[] 转换为  string                 string socketName = strRec.Substring(0, strRec.IndexOf("\n"));                IPAddress clientIp = ((System.Net.IPEndPoint)acceptSock.RemoteEndPoint).Address;      取得客户端IP址地                string strip = clientIp.ToString();                socketNameList.Add(socketName);                socketIpList.Add(strip);                UpdatePersonListBox();                      //更新用户列表                clientSocketList.Add(acceptSock);                ParameterizedThreadStart parstart = new ParameterizedThreadStart(RecvFile);              为每一个客户端添加接收信息听监线程                Thread th = new Thread(parstart);                threadList.Add(th);                th.Start((object)acceptSock);            }        }

接收文件线程

每日一道理
喜欢海,不管湛蓝或是光灿,不管平静或是波涛汹涌,那起伏荡漾的,那丝丝的波动;喜欢听海的音声,不管是浪击礁石,或是浪涛翻滚,那轻柔的,那澎湃的;喜欢看海,不管心情是舒畅的或是沉闷的,不管天气是晴朗的或是阴沉的,那舒心的,那松弛的……
private void RecvFile(object acceptSock)        {            bool flag = false;            Socket recvSocket = (Socket)acceptSock;            byte[] byteArry = new byte[256];            string path = "recvVoice";          //建创接收文件文件夹            if (!Directory.Exists(path))            {                Directory.CreateDirectory(path);            }            string strnow = DateTime.Now.ToString("yyyyMMdd-hh-mm-ss");               //根据统系时光定名接收文件            string strpath = "recvVoice\\" + strnow + ".wav";                  byte[] buffLen = new byte[50];            int count=recvSocket.Receive(buffLen);                                  //接收文件的字节长度用于断判接收文件结束   认默50字节发送            string strRec = System.Text.Encoding.Default.GetString(buffLen);            string fLen = strRec.Substring(0, strRec.IndexOf("\n"));            int fileLen = 0;            try            {                fileLen = Convert.ToInt32(fLen);            }            catch(Exception el)            {                MessageBox.Show(el.Message);            }            int recCount = 0;            int readLen = 0;            MemoryStream memStream = new MemoryStream();            try            {                while ((recCount = recvSocket.Receive(byteArry)) > 0)                // 环循接收文件  字节发送                {                    readLen = readLen + recCount;                    if (readLen >= fileLen)                                     //跳出环循志标                         {                        memStream.Write(byteArry, 0, recCount);                        flag = true;                        break;                    }                    memStream.Write(byteArry, 0, recCount);                        //把网络流写进文件流                         flag = true;                                                  //接收文件志标                }            }            catch (Exception el)            {                flag = false;                memStream.Close();             //   fs.Close();                memStream = null;              //  fs = null;                MessageBox.Show(el.Message);                RecvFile(acceptSock);                                //应用递归  继承听监文件接收来信                return;            }            if (flag)            {                FileStream fs = new FileStream(strpath, FileMode.OpenOrCreate);                memStream.WriteTo(fs);                fs.Close();                fs = null;                 UpdateLabel(flag);                IPAddress clientIp = ((System.Net.IPEndPoint)recvSocket.RemoteEndPoint).Address;                string strip = clientIp.ToString();                int index = socketIpList.IndexOf(strip);                AddVoiceToListBox(socketNameList[index] + "****" + socketIpList[index], strpath, flag);              //把客户端用户名址地,接收文件的存保径路                                                                                                                     //添加到音声列表       }            flag = false;            memStream.Close();            memStream = null;            RecvFile(acceptSock);                                   //应用递归  继承听监文件接收来信                                          }

当地音声发送数函

private void SendFile(Socket acceptSock,string vpath)        {            Socket sendSocket = (Socket)acceptSock;            byte[] byteArray = new byte[100];            Stream st = File.OpenRead(vpath);            Byte[] b = new Byte[1024];            string strlen = st.Length.ToString();            byte[] bytes = System.Text.Encoding.Default.GetBytes(strlen + "\r\n");          //string 转换byte[]               sendSocket.Send(bytes);             //发送文件长度     用于断判文件接收结束            int count = 0;            int sent = 0;            int offset = 0;            int left = 0;            Thread.Sleep(1000);           //重点哦            while (offset < st.Length)            {                //buffer.CopyTo(b, 1024);                count = st.Read(b, 0, 1024);                offset = offset + count;                left = Convert.ToInt32(st.Length) - offset;                if (left <= 1024)                {                    byte[] temp = new byte[left];                    sent = sendSocket.Send(b);                    // Thread.Sleep(10);                    count = st.Read(b, 0, left);                    sent = sendSocket.Send(temp);                    break;                }                sent = sendSocket.Send(b);            }            IPAddress clientIp = ((System.Net.IPEndPoint)sendSocket.RemoteEndPoint).Address;            string strip = clientIp.ToString();            int index = socketIpList.IndexOf(strip);            AddVoiceToListBox("Server Send To ****" + socketNameList[index], vpath, true);        }

整完的工程下载址地(源码)

:http://download.csdn.net/detail/zhujinghao09/5313666

文章结束给大家分享下程序员的一些笑话语录: 问:你觉得让你女朋友(或者任何一个女的)从你和李彦宏之间选一个,你觉得她会选谁?  
  答:因为李艳红这种败类,所以我没女友!

更多相关文章

  1. 【Android(安卓)Developers Training】 24. 保存键值对
  2. Android(安卓)下载zip压缩文件并解压
  3. Android(安卓)手机上传图片至javaweb服务器(servlet)
  4. Android2.2快速入门 zz
  5. Androidstudio打包jar和arr包
  6. AndroidStudio 升级后遇到的问题
  7. 2019 Android开发工程师面经
  8. Android中Listview通过适配器设置Item的高度及其他样式
  9. Android(安卓)Debug Tools

随机推荐

  1. Android(安卓)SESSION的知识
  2. 《Android(安卓)4游戏高级编程(第2版)》书
  3. Windows下安装android设备驱动
  4. 【Android(安卓)动画】帧动画、补间动画
  5. Android程序员
  6. 004. Android界面刷新没有调用OnMeasure
  7. 4.2 Android(安卓)自定义EditText输入框
  8. 在Eclipse配置安装Android详细新手教程
  9. Eclipse添加Android语法提示
  10. Unity Android接入MoPub聚合广告SDK