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 阿蜜果 阅读(18221) 评论(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月出版)
     

留言簿(262)

随笔分类

随笔档案

文章分类

相册

关注blog

积分与排名

  • 积分 - 2284416
  • 排名 - 3

最新评论

阅读排行榜

评论排行榜