java Socket编程,客户端要发送两次数据服务器才接受一次,为啥?
小弟写的客户端服务器小程序,要求做到客户端由键盘输入一个数据,服务器能收到并显示在logcat里,小弟的程序如下:
客户端程序:
package jack.netprogram;
import java.io.BufferedReader;
import 
java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.
UnknownHostException;
public class ClientThread extends Thread{	
	public void run(){
		try {
			Socket socket = new Socket("10.92.1.28", 1804);
			BufferedReader sin = new BufferedReader(new InputStreamReader(System.in));
			PrintWriter os = new PrintWriter(socket.getOutputStream());			
			String readline = null;
			System.out.println("Client input:");
			readline = sin.readLine();
			while(!readline.equals("bye")){
				os.println(readline);
				os.flush();
				System.out.println("Client send:" + readline);
				readline = sin.readLine();
			}
			os.close();
			socket.close();
		} catch (UnknownHostException e) {			
			e.printStackTrace();
		} catch (
IOException e) {			
			e.printStackTrace();
		}
	}
}
服务器程序:
package jack.netprogram;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;
public class ServerThread extends Thread{	
	public void run(){
		try {
			String receive = null;
			ServerSocket server = new ServerSocket(1804);
			Socket socket = server.accept();
			BufferedReader is = new BufferedReader(new InputStreamReader(socket.getInputStream()));
			receive = is.readLine();
			while(receive != null ){
				System.out.println("Server receive:" + is.readLine());
				receive = is.readLine();
				if(receive == null)
					break;
			}
			is.close();
			socket.close();
			server.close();
		} catch (UnknownHostException e) {			
			e.printStackTrace();
		} catch (IOException e) {			
			e.printStackTrace();
		}
	}
}
主程序:
package jack.netprogram;
public class ClientServer {	
	public static void main(String args[]){
		ClientThread client = new ClientThread();
		ServerThread server = new ServerThread();
		server.start();
		client.start();
	}
}
程序运行的结果却是:
Client input:
123
Client send:123
abc
Client send:abc
Server receive:abc
dfg
Client send:dfg
ggg
Server receive:ggg
Client send:ggg
bye
我的疑问在:为什么客户端每隔一次放松的数据才能被服务器接受,而不是每次都能接收。
还有,如果我不想用bye作为结束标志,想换成回车键作为结束标志的话该怎么改代码?
------解决方案--------------------Java code
receive = is.readLine();
while(receive != null ){
System.out.println("Server receive:" + [color=#FF0000]is.readLine[/color]());
receive = [color=#FF0000]is.readLine()[/color];
------解决方案--------------------
Java code
receive = is.readLine();
while(receive != null ){
System.out.println("Server receive:" + is.readLine());
receive = is.readLine();