<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 297,  comments - 1618,  trackbacks - 0
    最近對Socket有初次接觸,對其比較感興趣,參考網上的Socket編程實例,修改了部分內容后,寫了一個Socket的Server端和Cliet端收發數據的小例子。

        該實例完成的功能如下:

        一次啟動Server端和Client端后,首先由Server端發‘1’給Client端,Client端將接收到的數據加1后,發該數據給Server端,Server端再將數據加1后發給Client端,依次類推。直到Server端收到數據20,Client收到19時,兩方中斷收發。

        程序代碼如下:

    1.    Socket Server
    /**
     * Socket的Server舉例
     * 
    @author Amigo Xie(xiexingxing1121@126.com)
     * 
    @since 2006/12/28
     
    */

    public class SocketServer {
        ServerSocket serverSocket 
    = null;
        Socket socket 
    = null;
        DataInputStream inStream 
    = null;
        DataOutputStream outStream 
    = null;
        
        
        
    public static void main(String[] args) {
            SocketServer socketServer 
    = new SocketServer();
            socketServer.waitForClient();
        }

        
        
    public SocketServer() {
            
    try {
                serverSocket 
    = new ServerSocket(6600);
            }
     catch(Exception e) {
                e.printStackTrace();
            }

        }

        
        
    void waitForClient() {
            
    try {
                socket 
    = serverSocket.accept();
                inStream 
    = new DataInputStream(socket.getInputStream());
                outStream 
    = new DataOutputStream(socket.getOutputStream());
                outStream.writeUTF(
    "1");
                socket.setSoTimeout(
    3000);
                acceptAndSendData();
            }
     catch(Exception e) {
                e.printStackTrace();
            }

        }


        
    void acceptAndSendData(){
            
    while(true{
                
    try {
                    String acceptStr 
    = inStream.readUTF();
                    System.out.println(
    "Server accept:" + acceptStr);
                    
    int num = Integer.parseInt(acceptStr) + 1;
                    
    if(num > 20{
                        System.out.println(
    "Send end!");
                        
    break;
                    }
     else {
                        String sendStr 
    = Integer.toString(num);
                        outStream.writeUTF(sendStr);
                    }

                }
     catch(Exception e) {
                    e.printStackTrace();
                    
    break;
                }

            }

        }

    }

     2. Socket Client端代碼
    /**
     * Socket的Client舉例
     * 
    @author Amigo Xie(xiexingxing1121@126.com)
     * 
    @since 2006/12/28
     
    */

    public class SocketCliet {

        Socket socket 
    = null;

        DataInputStream inStream 
    = null;

        DataOutputStream outStream 
    = null;

        
    public static void main(String[] args) {
            SocketCliet socketCliet 
    = new SocketCliet();
        }


        
    public SocketCliet() {
            
    try {
                init();
                waitData();
            }
     catch (Exception e) {
                e.printStackTrace();
            }

        }


        
    void init() throws Exception {
            socket 
    = new Socket("127.0.0.1"6600);
            inStream 
    = new DataInputStream(socket.getInputStream());
            outStream 
    = new DataOutputStream(socket.getOutputStream());
            socket.setSoTimeout(
    3000);
        }

        
        
    void waitData() {
            
    boolean flag = true;
            
    while (flag) {
                
    try {
                    String acceptStr 
    = inStream.readUTF();
                    System.out.println(
    "Client accept: " + acceptStr);
                    String sendStr 
    = Integer.toString(Integer.parseInt(acceptStr) + 1);
                    outStream.writeUTF(sendStr);
                    
    if(Integer.parseInt(sendStr) >= 20{
                        flag 
    = false;
                    }

                }
     catch (Exception e) {
                    e.printStackTrace();
                    
    break;
                }

            }

        }

    }
    在調試時,由于編碼的失誤,因為在Server端有超過20時跳出while的判斷,而Client類中未加:

       if(Integer.parseInt(sendStr) >= 20) {
             flag = false;
        }

        來使程序跳出循環,程序報出了如下錯誤:java.net.SocketException: Connection reset。。。。。。

      引起該問題的原因是由于此時Server端連接已經被復位,而Client依然通過該連接在接收和發送數據,在網上搜索了一下該錯誤,發現該錯誤引起的原因大都是防火墻的原因,嘿嘿,又學了一招。

          過幾天繼續研究Socket通信編程,寫了好的實用的例子繼續帖上來 :)

    posted on 2007-02-11 23:37 阿蜜果 閱讀(18248) 評論(2)  編輯  收藏 所屬分類: 網絡通信相關


    FeedBack:
    # re: Socket編程實例--一個Socket Server和Client端實現數據收發的例子 [未登錄]
    2010-06-05 15:37 | 白菜
    幾年前我還是一個學生的時候,無意中看到博主的博客,讓我學習了不少的東西.于是特地將博主的博客地址加入我鮮少使用的收藏夾中,可是后來無意中丟了,時光飛逝.今天再搜一個問題的時候,無意中又來到博主的博客,感觸時光飛逝,真的很深!  回復  更多評論
      
    # re: Socket編程實例--一個Socket Server和Client端實現數據收發的例子
    2011-12-29 14:42 | albrich
    我目前也再研究這個東西,但是不知道為什么總是出錯,很希望你能聯系我,Q:904755058  回復  更多評論
      
    <2007年2月>
    28293031123
    45678910
    11121314151617
    18192021222324
    25262728123
    45678910

          生活將我們磨圓,是為了讓我們滾得更遠——“圓”來如此。
          我的作品:
          玩轉Axure RP  (2015年12月出版)
          

          Power Designer系統分析與建模實戰  (2015年7月出版)
          
         Struts2+Hibernate3+Spring2   (2010年5月出版)
         

    留言簿(263)

    隨筆分類

    隨筆檔案

    文章分類

    相冊

    關注blog

    積分與排名

    • 積分 - 2294895
    • 排名 - 3

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 日韩免费在线观看视频| 亚洲无人区一区二区三区| 95免费观看体验区视频| 一级做a爰黑人又硬又粗免费看51社区国产精品视 | 国产精品免费高清在线观看| 久久久久久亚洲精品无码| 亚洲色成人网一二三区| 国产偷窥女洗浴在线观看亚洲| 日韩午夜免费视频| a毛片基地免费全部视频| 99久热只有精品视频免费看| 久99久无码精品视频免费播放| 亚洲精品乱码久久久久蜜桃| 91午夜精品亚洲一区二区三区| 亚洲国产精品久久久久| 综合亚洲伊人午夜网| 亚洲成A人片在线观看无码3D | 亚洲爱情岛论坛永久| 亚洲日本韩国在线| 免费在线观看你懂的| 国产男女猛烈无遮挡免费网站 | 亚洲免费在线观看视频| 亚洲精品国产电影午夜| 亚洲男人第一av网站| 亚洲va在线va天堂va888www| 亚洲AV综合色一区二区三区| 久久亚洲AV无码精品色午夜麻| 亚洲夜夜欢A∨一区二区三区| 亚洲一区精品伊人久久伊人| 亚洲国产精品日韩专区AV| 亚洲成a人一区二区三区| 亚洲国产精品无码久久久久久曰| 免费少妇a级毛片| 亚洲AV蜜桃永久无码精品| 亚洲精品tv久久久久久久久久| 亚洲国产精品成人| 亚洲中文字幕无码永久在线| 久久精品国产亚洲网站| 亚洲AV无码久久精品色欲| 久久精品亚洲中文字幕无码麻豆| 亚洲精品熟女国产|