读书人

一个简单客户端和服务器端中间流的读

发布时间: 2013-08-13 16:43:28 作者: rapoo

一个简单客户端和服务器端,中间流的读取一直出问题。。。。各位gg,jj帮忙看看啊
大二实习,给布置的任务,还要求要能实现中文的输入,输出,但是出现问题,程序到了发出后就没动了,不知道错到哪里了,555.

客户端
public class Client {

public static void main(String[] args) throws IOException {



String send=null;
System.out.println("请输入");
Scanner getSend=new Scanner(System.in);
send=getSend.next();

Socket s =new Socket("127.0.0.1",4242);

System.out.println("Connected to server...sending echo string");

PrintWriter writer =new PrintWriter(s.getOutputStream());

writer.println(send);
writer.flush();


InputStreamReader in = new InputStreamReader(s.getInputStream());

BufferedReader bufferedReader= new BufferedReader(in);

String oneLine=bufferedReader.readLine();

System.out.println("客户端收到"+oneLine);


bufferedReader.close();
in.close();



writer.close();
s.close();

}
}



服务器

public class Server {


public static void main(String[] args) throws IOException {

// TODO Auto-generated method stub


ServerSocket servSocket = new ServerSocket(4242);


System.out.println("监听4242");

boolean exist=true;


while (exist) {

Socket clntSocket = servSocket.accept();

// 获取连接的客户端的 SocketAddress

SocketAddress clientAddress = clntSocket.getRemoteSocketAddress();

System.out.println("收到的地址为" + clientAddress);

InputStreamReader in = new InputStreamReader(clntSocket.getInputStream());

BufferedReader bufferedReader= new BufferedReader(in);

String oneLine= null;

while(bufferedReader.read() != -1){
oneLine = oneLine + bufferedReader.readLine();
}

System.out.println(oneLine);

String returnLine="abcd";

switch(oneLine){

case "双色球": returnLine="你中了双色球"; break;

case "大乐透" : returnLine="你中了大乐透"; break;


case "英雄联盟" : returnLine="LOL"; break;


}

if(oneLine=="关闭")
exist=false;



PrintWriter writer =new PrintWriter(clntSocket.getOutputStream());

writer.println("returnLine");

System.out.println(" 客户端关闭连接");


writer.close();
clntSocket.close();


}

}
}
socket 服务器
[解决办法]
while(bufferedReader.read() != -1){
oneLine = oneLine + bufferedReader.readLine();
}
这边不要用循环 还是用 String oneLine=bufferedReader.readLine();
[解决办法]
在服务端LZ打印下oneLine,看看是否出现乱码。
另外,虽然jdk支持了String的case,建议还是转换成int,效率高些。

还有你的case要加括号的亲: case "双色球": { returnLine="你中了双色球"; break;}

读书人网 >J2EE开发

热点推荐