<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

    積分與排名

    • 積分 - 2294312
    • 排名 - 3

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: va亚洲va日韩不卡在线观看| 亚洲最大成人网色香蕉| 久久精品视频免费看| 亚洲伦理中文字幕| 亚洲AV无码乱码精品国产| 免费观看男人吊女人视频| 国产精品亚洲综合五月天| 亚洲成av人在片观看| 免费A级毛片无码A∨免费| 色网站在线免费观看| 久久亚洲AV无码精品色午夜麻豆| 亚洲毛片αv无线播放一区 | 亚洲国产精品无码久久久不卡 | 亚洲一卡2卡三卡4卡有限公司| 亚洲第一se情网站| 精品久久久久久亚洲| 成视频年人黄网站免费视频| 一级做α爱过程免费视频| 亚洲国产成人精品无码一区二区| 啦啦啦完整版免费视频在线观看 | 国产午夜亚洲精品不卡电影| 久久精品视频亚洲| 四虎影视在线永久免费看黄 | 边摸边吃奶边做爽免费视频网站| 免费人成视频在线| 一区二区三区免费在线视频 | 中文字幕日韩亚洲| 我要看免费的毛片| 三年片在线观看免费观看大全动漫| 亚洲欧洲国产精品香蕉网| 老司机永久免费网站在线观看| 亚洲色偷偷色噜噜狠狠99| 亚洲成色在线综合网站| 亚洲AV中文无码乱人伦在线视色| 一本久久A久久免费精品不卡| 综合亚洲伊人午夜网| 国产麻豆免费观看91| 无码国产精品一区二区免费虚拟VR | 亚洲最大福利视频| 亚洲av日韩av天堂影片精品| 亚洲国模精品一区|