java 编写的服务器客户端socket无法持续收发信息

只有第一次发信息能收到,第二次就不行了,代码有点长,放贴吧去了,哪位好心人帮帮看看,完全找不出原因啊,不是说连接成功后应该会一直监听吗?代码地址(http://tieba... 只有第一次发信息能收到,第二次就不行了,代码有点长,放贴吧去了,哪位好心人帮帮看看,完全找不出原因啊,不是说连接成功后应该会一直监听吗?代码地址(http://tieba.baidu.com/p/3218456363 展开
 我来答
百度网友5b1435d
推荐于2017-09-04 · TA获得超过203个赞
知道小有建树答主
回答量:259
采纳率:100%
帮助的人:104万
展开全部

  

serverSocket = new ServerSocket ( 9999 );
serverThread = new ServerThread ( serverSocket );
serverThread.start ( );

看你这块的代码,你的server定义了serverSocket,当你开启服务后,新建了一个服务线程,去监听

while( flag ){
try{
    Socket socket = serverSocket.accept( );
    ServerThreadAgent serverThreadAgent = new ServerThreadAgent( socket );
    serverThreadAgent.start( );
}
catch( Exception e ){
    e.printStackTrace( );
}

在监听的线程中,当遇到客户端的请求时,创建一个Socket,与客户端建立一条通道,进行通信

public void run ( )
{
    try
    { 
    
        Object message = SocketUtil.readStream ( socket );// 接收信息
        System.out.println ( socket.getInetAddress ( ) + "发来信息:"
        + message);
        String sendMessage = "信息已经收到。";
        SocketUtil.writeStream ( sendMessage, socket );// 发送信息
    }
    catch ( Exception e )
    {
        e.printStackTrace ( );
    }
}

看你的与客户端保持连接的服务代理,服务代理线程开启后,先是接受客户端的信息,先是出来,然后向客户端发送一条消息,然后,然后呢???????


然后,就没有然后来了,服务代理线程的生命就此结束,也就是说客户端与服务端的通话结束,连接已经断开。


与客户端既然已经断了,怎么可能进行消息传递呢???


这样一分析,问题明显出来了,问题出在哪?


问题就是在于与客户端保持通话的服务代理线程,怎样才能保持通话呢?


那就是在代理线程的run方法中进行循环进行监听,也就是说消息的接受,这样,才能保持通话,想结束的时候,就退出循环,或是客户端主动的结束通话。

更多追问追答
追问
不好意思,又有问题了,这样将2个线程用while(true)循环监听,为何不能监听到全部,我试了一下,客户端发了10条,只监听到其中几条,另外一些不知道怎么就没了
追答
你先启动一个客户端与服务端连接,尝试发送消息,看会不会出现问题,有问题的话私信吧,这样不方便
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式