就是用socket 和多线程做的广播,现在问题是,如果一个client 发了消息,server端可以收到,并且已经把这个消息发给所有的client了,但是为什么在客户端显示不出来啊?是我的客户端接受有问题么?麻烦大家帮我看下,该怎么改啊?都搞了一晚上了。。
先谢过~SocketServer类:
public class SocketServer {
public static void main(String[] args) throws IOException{
List list=new ArrayList();
ServerSocket server=new ServerSocket(5678);
int count=0;
while(true){
Socket ss=server.accept();
list.add(ss);
count++;
SocketThread mulserver=new SocketThread(ss,list);
System.out.println("The number of clients is: "+count);
mulserver.start();
}
}}SocketThread类:
public class SocketThread extends Thread{
private Socket client;
List list;
public SocketThread(Socket accept, List list) {
this.client=accept;
this.list=list;
}
public void run(){
try{
BufferedReader in=new BufferedReader(new InputStreamReader(client.getInputStream()));
while(true){
String str;
str = in.readLine();
broadcast(str);
if(str.equals("end"))
break;
}
client.close();
}catch (IOException e) {
e.printStackTrace();
} finally{}
}
public void broadcast(String str) throws IOException{
for(Iterator it=list.iterator();it.hasNext();){
Socket ss=(Socket)it.next();
PrintWriter out=new PrintWriter(ss.getOutputStream());
System.out.println("socket: "+ss+"server sent "+str);
out.println("socket: "+ss+"server sent "+str);//这个可以得到
out.flush();
}
}
}最后是我的客户端,应该是这个不对吧;
public class SocketClient{
static Socket server;
public static void main(String[] args)throws Exception{
server=new Socket(InetAddress.getLocalHost(),5678);
BufferedReader wt=new BufferedReader(new InputStreamReader(System.in));
PrintWriter out=new PrintWriter(server.getOutputStream());
BufferedReader in=new BufferedReader(new InputStreamReader(server.getInputStream()));
while(true)
{
while(in.readLine()==null){
String str=wt.readLine();
out.println(str);
out.flush();
if(str.equals("end"))
break;
System.out.println(in.readLine());
}
out.println(in.readLine());
server.close();
}
}
}
先谢过~SocketServer类:
public class SocketServer {
public static void main(String[] args) throws IOException{
List list=new ArrayList();
ServerSocket server=new ServerSocket(5678);
int count=0;
while(true){
Socket ss=server.accept();
list.add(ss);
count++;
SocketThread mulserver=new SocketThread(ss,list);
System.out.println("The number of clients is: "+count);
mulserver.start();
}
}}SocketThread类:
public class SocketThread extends Thread{
private Socket client;
List list;
public SocketThread(Socket accept, List list) {
this.client=accept;
this.list=list;
}
public void run(){
try{
BufferedReader in=new BufferedReader(new InputStreamReader(client.getInputStream()));
while(true){
String str;
str = in.readLine();
broadcast(str);
if(str.equals("end"))
break;
}
client.close();
}catch (IOException e) {
e.printStackTrace();
} finally{}
}
public void broadcast(String str) throws IOException{
for(Iterator it=list.iterator();it.hasNext();){
Socket ss=(Socket)it.next();
PrintWriter out=new PrintWriter(ss.getOutputStream());
System.out.println("socket: "+ss+"server sent "+str);
out.println("socket: "+ss+"server sent "+str);//这个可以得到
out.flush();
}
}
}最后是我的客户端,应该是这个不对吧;
public class SocketClient{
static Socket server;
public static void main(String[] args)throws Exception{
server=new Socket(InetAddress.getLocalHost(),5678);
BufferedReader wt=new BufferedReader(new InputStreamReader(System.in));
PrintWriter out=new PrintWriter(server.getOutputStream());
BufferedReader in=new BufferedReader(new InputStreamReader(server.getInputStream()));
while(true)
{
while(in.readLine()==null){
String str=wt.readLine();
out.println(str);
out.flush();
if(str.equals("end"))
break;
System.out.println(in.readLine());
}
out.println(in.readLine());
server.close();
}
}
}
解决方案 »
- 求高手解答这段程序打印出多少?
- 求助~~
- 算法设计
- 一个JAVA读取字符串的问题
- java的时间函数
- 小弟有一道习题,实在不行了,我只能编出框架来,调用接口监听和文件存取时总是出错,不知道为什么? 哪位好心的大哥给编一下,小弟这里谢过
- 发布一款图形工具包,等大家唾骂(可直接运行)
- applet中如何弹出一个网页~~~在线等待,回答即给分
- 请问各位,在java中如何将一个String类型的字符串转换成Int类型。
- Oracle9i JDeveloper 安装好麻烦,我e文不好,各位老大可否指点一下。列举一下安装步骤!谢谢了!
- applet 签名后需要更改客户机的相关文件么
- 有人会用JAVA把声音文件通过一定的算法压缩为空间比较小的音频文件么?
我用mulserver.start() 就是调用SocketThread类的run()方法了啊
String str=wt.readLine();
out.println(str);
out.flush();
if(str.equals("end"))
break;
System.out.println(in.readLine());
}
有人可以说一下while(true)里面的思路吗?谢谢!