java 编写的服务器客户端socket无法持续收发信息
只有第一次发信息能收到,第二次就不行了,代码有点长,放贴吧去了,哪位好心人帮帮看看,完全找不出原因啊,不是说连接成功后应该会一直监听吗?代码地址(http://tieba...
只有第一次发信息能收到,第二次就不行了,代码有点长,放贴吧去了,哪位好心人帮帮看看,完全找不出原因啊,不是说连接成功后应该会一直监听吗?代码地址(http://tieba.baidu.com/p/3218456363)
展开
1个回答
展开全部
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条,只监听到其中几条,另外一些不知道怎么就没了
追答
你先启动一个客户端与服务端连接,尝试发送消息,看会不会出现问题,有问题的话私信吧,这样不方便
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询