posts - 241,  comments - 116,  trackbacks - 0
          /*
          TCP通訊

          [示例]:傳送文本文件 (客戶端)
          */

          import java.net.*;
          import java.io.*;
          class Demo
          {
            public static void main(String[] args) throws Exception
            {
              new FileClient();
            }
          }

          class FileClient  //客戶端
          {
            FileClient() throws Exception
            {
              s.op("客戶端啟動(dòng)....");
              client();
            }
           
            public void client()throws Exception
            {
              Socket sock = new Socket("192.168.1.3",10006);//指定服務(wù)器地址和接收端口
              
              //將c盤一個(gè)文本文件發(fā)送到服務(wù)器端
              BufferedReader bufr = new BufferedReader(new FileReader("c:\\abcd.java"));
              
              //定義socket輸出流,將數(shù)據(jù)發(fā)給服務(wù)端
              //BufferedWriter bufwOut=new BufferedWriter(new OutputStreamWriter(sock.getOutputStream()));
              //我們不用它了,用PrintWriter更方便,因?yàn)閜rintln方法自動(dòng)換行和刷新緩沖區(qū)9
              PrintWriter priOut= new PrintWriter(sock.getOutputStream(),true);//將數(shù)據(jù)發(fā)送到socket輸出流
              
              String fileLine = null;
              while(true)
              {
                fileLine = bufr.readLine(); //讀文本文件
                if(fileLine!=null)
                {
                  priOut.println(fileLine); //將一行文本寫入socket輸出流      
                }
                else
                {
                  break;
                }    
              }
              //文件傳送完后,告訴服務(wù)端,"我發(fā)完了",也就是加一個(gè)結(jié)束標(biāo)記
              //priOut.println("*#over886*#");  這種方式不好,服務(wù)端怎么知道結(jié)束標(biāo)記是什么,不方便
              
              sock.shutdownOutput(); //結(jié)束TCP套接字,之前寫入的數(shù)據(jù)都將被發(fā)送,并且后跟TCP連接終止標(biāo)記
              BufferedReader bufrIn=new BufferedReader(new InputStreamReader(sock.getInputStream()));    
              String inStr = bufrIn.readLine(); //服務(wù)端此時(shí)應(yīng)該返回字符,比如"發(fā)送成功"
              s.op(inStr);   //顯示服務(wù)器返回的字符信息 "上傳成功."
              bufr.close();
              sock.close();
            }
          }

          class s  
          {
            public static void op(Object obj) //打印
            {
              System.out.println(obj);
            }
          }
          /*
          這里我們沒有考慮客戶端的文件名,和客戶端判斷是否有重名文件,我們指定了文件名和路徑

          [示例]:傳送文本文件 (服務(wù)端)
          */
          import java.net.*;
          import java.io.*;
          class Demo
          {
            public static void main(String[] args) throws Exception
            {
              new FileServer();
            }
          }

          class FileServer  //服務(wù)端
          {
            FileServer() throws Exception
            {
              s.op("服務(wù)端啟動(dòng)......");
              server();
            }

            public void server() throws Exception
            {
              ServerSocket serversock = new ServerSocket(10006);
              Socket sock = serversock.accept();
              
              String ip = sock.getInetAddress().getHostAddress();
              s.op("來自客戶端IP "+ip+" 的文件");
              
              BufferedReader bufrIn = new BufferedReader(new InputStreamReader(sock.getInputStream()));
              PrintWriter priFileOut = new PrintWriter(new FileWriter("d:\\getFile.java"),true);
              String inStr = null;
              while(true)
              {
                inStr = bufrIn.readLine();
                if(inStr!=null)
                {
                  s.op(inStr); //將客戶端的文本數(shù)據(jù)打印到控制臺(tái)看看,對(duì)于大文件,本行代碼可注釋掉
                  priFileOut.println(inStr); //寫到文件中          
                }
                else
                {
                  break;
                }
              }  
              //文件保存完給客戶端一個(gè)返回信息
              PrintWriter priOut = new PrintWriter(sock.getOutputStream(),true); //注意別丟了參數(shù)true
              priOut.println("上傳成功.");//如果沒有true參數(shù),字符在緩沖區(qū)中不刷新的
              sock.close();
              priFileOut.close();
              serversock.close();
            }
          }

          class s
          {
            public static void op(Object obj) //打印
            {
              System.out.println(obj);
            }
          }
          posted on 2012-02-01 10:25 墻頭草 閱讀(2100) 評(píng)論(2)  編輯  收藏

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          人人游戲網(wǎng) 軟件開發(fā)網(wǎng) 貨運(yùn)專家
          主站蜘蛛池模板: 平舆县| 灯塔市| 根河市| 大埔县| 尚志市| 濮阳市| 德江县| 龙岩市| 贵溪市| 武川县| 德钦县| 桦川县| 五家渠市| 惠安县| 安平县| 潢川县| 娱乐| 宝丰县| 达拉特旗| 秭归县| 天峻县| 崇礼县| 宁海县| 南开区| 滁州市| 封开县| 渝中区| 阿拉善右旗| 花莲县| 博乐市| 娱乐| 油尖旺区| 土默特左旗| 铜山县| 都昌县| 平邑县| 阿尔山市| 鄯善县| 金昌市| 瑞安市| 鹤庆县|