파일 수신 네트워크 무전기 C \ # 서버 안 드 로 이 드 클 라 이언 트 (2) C \ # 서버 코드 분석

10737 단어 android
최근 연구 문건 접수, 조금 정리, 나중에 계승 보충:
    
     완 성 된 프로젝트 다운로드 주소 (원본)
    :http://download.csdn.net/detail/zhujinghao09/5313666 
    순서 기능 소개:
                      서버: PC
                           말.   C#
                           버튼 으로 server Socket 오픈
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("
")); 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("
")); 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
"); //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
 
글 이 끝나 면 다음 프로그래머 의 농담 어록 을 공유 하 겠 습 니 다. 여자친 구 (혹은 어떤 여자) 가 당신 과 이언 홍 사이 에서 하 나 를 고 르 게 할 것 같 습 니 다. 누 구 를 고 를 것 같 습 니까?답: 이 연 홍 같은 변절자 때문에 나 는 여자친 구가 없다!

좋은 웹페이지 즐겨찾기