java 网络编程c/s…… 高手请进……

youngnew108 2010-05-30 07:27:58
为什么我在客户端发送多句消息,服务端却总是只能收到一句呢?怎么改进下?麻烦高手指导》》》

//客户端
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 ClientTest{
public static void main(String []arg)
{
try{
Socket socket=new Socket("127.0.0.1",3024); //向本机的4700端口发出客户请求
BufferedReader sin=new BufferedReader(new InputStreamReader(System.in));//由系统标准输入设备构造bufferedreader对象
PrintWriter os=new PrintWriter(socket.getOutputStream());//由socket对象得到输出流,并构造printwriter对象
BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInputStream()));//由socket对象得到输入流,并构造相应的bufferedreader对象
String readline;
String str;
readline=sin.readLine(); //从系统标准输入读入一字符串
while(true) //若从标准输入读入的字符串为 " bye" 则停止循环
{
os.println(readline); //将从系统标准输入读入的字符串输出到server
os.flush();//刷新输出流,使server马上收到该字符串
str=is.readLine();
System.out.println(" server:" +str); //从server读入一字符串,并打印到标准输出上
if(str.equals("bye"))
{
break;
}
readline=sin.readLine(); //从系统标准输入读入一字符串
} //继续循环
os.close(); //关闭socket输出流
is.close(); //关闭socket输入流
socket.close(); //关闭socket
}catch(Exception e){
System.out.println("error:"+e);
}
}
}



//服务器端
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Date;

public class ServerTest
{
public static void main(String []args)
{
try
{
ServerSocket server=null ;
try
{
server=new ServerSocket(3024); //创建一个serversocket在端口4700监听客户请求
}catch(Exception e)
{
System.out.println(" can not listen to:" +e) ; //出错,打印出错信息
}
Socket socket=null ;
try
{
socket=server.accept(); //使用accept()阻塞等待客户请求,有客户请求到来则产生一个socket对象,并继续执行
}catch(Exception e)
{
System.out.println(" error: " +e); //出错,打印出错信息
}
String line ;
BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInputStream())); //由socket对象得到输入流,并构造相应的bufferedreader对象
PrintWriter os=new PrintWriter(socket.getOutputStream()); //由socket对象得到输出流,并构造printwriter对象
line=is.readLine(); //在标准输出上打印从客户端读入的字符串
while(true) //如果该字符串为 " bye" ,则停止循环
{
System.out.println(" client:" +line); //从client读入一字符串,并打印到标准输出上
if(line.equals("bye")) break;
else if(line.equals("time"))
{
Date dt=new Date();
os.println(dt.getHours()+":"+dt.getMinutes()); //向客户端输出该字符串
os.flush(); //刷新输出流,使client马上收到该字符串
}
else if(line.equals("exit"))
{
os.println("bye"); //向客户端输出该字符串
os.flush(); //刷新输出流,使client马上收到该字符串
break;
}
line=is.readLine(); //从系统标准输入读入一字符串
} //继续循环
os.close(); //关闭socket输出流
is.close(); //关闭socket输入流
socket.close(); //关闭socket
server.close(); //关闭serversocket
}catch(Exception e){
System.out.println("error:"+e);
}
}
}
...全文
45 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
youngnew108 2010-05-30
  • 打赏
  • 举报
回复
太谢谢你了。。。都说群众的眼睛是雪亮的,真说的没错!呵呵。。
若鱼1919 2010-05-30
  • 打赏
  • 举报
回复

server端的while循环改为:
while(true) //如果该字符串为 " bye" ,则停止循环
{
System.out.println(" client:" +line); //从client读入一字符串,并打印到标准输出上
if(line.equals("bye")) break;
else if(line.equals("time"))
{
Date dt=new Date();
os.println(dt.getHours()+":"+dt.getMinutes()); //向客户端输出该字符串
os.flush(); //刷新输出流,使client马上收到该字符串
}
else if(line.equals("exit"))
{
os.println("bye"); //向客户端输出该字符串
os.flush(); //刷新输出流,使client马上收到该字符串
break;
}else{
os.println(line); //向客户端输出该字符串
os.flush(); //刷新输出流,使client马上收到该字符串a
}
line=is.readLine(); //从系统标准输入读入一字符串
} //继续循环

50,549

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧