socket中while(true)的使用

问题描述

socket中while(true)的使用

本人初学java编程,在书中看到这个语句,这个是服务端接受语句的代码

 package dddd;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;

public class MyTcp {
private BufferedReader reader;
private ServerSocket server1;
private ServerSocket server2;
private Socket socket1;
private Socket socket2;

void getserver1(){
    try{
        server1=new ServerSocket(7993);
        System.out.println("服务器套接字已经创建成功");
        while(true){
            System.out.println("等待客户机链接");
            socket1=server1.accept();
            reader=new BufferedReader(new InputStreamReader(socket1.getInputStream()));
            getClientMessage(socket1);
        }
    }catch(Exception e){
        e.printStackTrace();
    }
}
private void getClientMessage(Socket socket){
    try{
        while(true){
            System.out.println("来自客户机的信息:"+reader.readLine());
        }
    }catch(Exception e){
        e.printStackTrace();
    }
    try{
        if(reader!=null){
            reader.close();
            System.out.println("readerclose");
        }
        if(socket!=null){
            socket.close();
            System.out.println("socketclose");
        }
    }catch(IOException e){
        e.printStackTrace();
    }
}
public static void main(String[] args){
    MyTcp tcp=new MyTcp();
    tcp.getserver1();
}
}

这里面有两个while(true)都不太明白什么意思。按照我的理解在第二个语句

 while(true){
            System.out.println("来自客户机的信息:"+reader.readLine());
        }

里面,system应该不断输出这个消息啊,但是结果system只是输出了一段消息

我从客户端输入一次服务端便响应一次,程序没问题,就是想知道为何while(true)没有出现死循环。

解决方案

如何在while和for中使用ssh
Delphi中for、while 使用注意事项
【转】for(;;)和while(true)的区别

解决方案二:

因为socket1=server1.accept(); 出现等待状态 。。 你可以debug看一下 他会一直在那地方不动,,,知道有数据传输 才会向下执行。。

解决方案三:

没错啊,首先会先开在accept()这个函数,他在等待状态,如果有客户端发送数据过来,就往下执行,
就会卡在第二个while(true)中,你的log就提体现出来啦,
=>>>>等待客户机链接, 就打印一次,
来自客户机的信息:===>这个一直打印,
这样还理解啊

解决方案四:

reader=new BufferedReader(new InputStreamReader(socket1.getInputStream()));
目前的理解是用上面的语句实例化reader对象后
reader.readLine()
用这个语句调用readline方法,会读取发送来的数据,如果没有数据则会在阻塞状态等到客户端的数据,所以一直在第二个while中循环

时间: 2024-09-12 17:04:30

socket中while(true)的使用的相关文章

Java socket中关闭IO流后,发生什么事?(以关闭输出流为例)

声明:该博文以socket中,关闭输出流为例进行说明.   为了方便讲解,我们把DataOutputstream dout = new DataOutputStream(new BufferedOutputStream(mySocket.getOutputStream()));中的dout做为Socket输出流的代言.同样的,din是输入流的代言. 可以造成dout被关闭的操作有: 1.调用dout.close();或din.close();因为使用这种流关闭,会造成socket被关闭,所以输入

java-关于Socket中的输出流缓存问题

问题描述 关于Socket中的输出流缓存问题 为什么以下程序中Send Request cost的输出在第二次之后都是0或者1ms? public class MyThread implements Runnable { @Override public void run() { while (true) { try { Thread.sleep(1000); getTime(); } catch (InterruptedException e) { e.printStackTrace(); }

Socket中服务器向客服端发送信息的问题

问题描述 Socket中服务器向客服端发送信息的问题 20C 先上代码:public class ServerThread implements Runnable{ //定义当前线程所处理的Socket Socket s=null; BufferedReader bReader=null; OutputStream os=null; public ServerThread(Socket s) throws IOException{ this.s=s; bReader=new BufferedRe

摄像头-android 从socket中读取数据转换bitmap为空

问题描述 android 从socket中读取数据转换bitmap为空 用蓝牙传的,这是客户端用摄像头预览的数据 这是传数据的方法 这是服务端接收数据 日志上显示 D/skia: --- SkImageDecoder::Factory returned null 打印接收到的数据byte[] b时显示一排竖方框,这应该是乱码或者是空吧,是编码格式的问题? 解决方案 http://www.cnblogs.com/devinzhang/archive/2012/06/05/2536848.html

javascript-javaScript中返回true和false的问题,求大神解答!!

问题描述 javaScript中返回true和false的问题,求大神解答!! <%-- Created by IntelliJ IDEA. User: TopbeCoder5 Date: 2015/1/18 Time: 20:44 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" langu

java-Java Socket网络通信问题,向百度发送数据(学习socket中~)

问题描述 Java Socket网络通信问题,向百度发送数据(学习socket中~) 我在本地客户端向百度某个端口(如:80)发送一个数据(例如字符a),百度会返回什么信息吗? 测了一下,并没有什么回应.那么我在本地客户端怎么做,百度才会返回一些信息 (例如:时间.网页新闻之类的消息) 解决方案 http://blog.csdn.net/b_h_l/article/details/8712282 解决方案二: 基于Java的socket网络通信Java网络通信Socket[Cocos2d-x]使

协议-在socket中port设置,服务器为9001,客户端为9002可以吗?

问题描述 在socket中port设置,服务器为9001,客户端为9002可以吗? 因为我们设置端口时,大部分都设置的一样,比如都是port=9001,但是我看到帖子说可以不一致,那么客户端是怎么找到的服务器的端口的? 解决方案 设置的都要一样.................

请问socket中各种函数(rec,send等)功能是怎么实现的,有没有socket的源码分析一下。

问题描述 请问socket中各种函数(rec,send等)功能是怎么实现的,有没有socket的源码分析一下. 我想说的是求socket的实现,而不是利用socket去编程,求大神 解决方案 可以先了解一下winpcap编程 解决方案二: Linux TCP/IP协议栈之Socket的实现分析(一 套接字的创建) 解决方案三: 基本上都在driver里面了 你要愿意去读linux 源代码好了 解决方案四: socket的实现就很底层了,那个应该属于嵌入式驱动开发了,需要控制硬件也要开放上层软件接

socket中FAR*是什么意思

问题描述 socket中FAR*是什么意思 比如 int select( int nfds, fd_set FAR*readfds, fd_set FAR*writefds, fd_set FAR*exceptfds, const struct timeval FAR*timeout ); fd_set是个结构体,后面的FAR*是什么意思 解决方案 以前far是指远指针,现在应该没有什么意义了. 解决方案二: http://zhidao.baidu.com/link?url=g7nEqPlKLD