日期:2014-05-20  浏览次数:20717 次

(聊天室功能制作)java怎么讲服务器的信息发送到客户端?
我们编两个程序,一个是Server(即服务器),一个是Client(即客户端)。可以执行多个Client,使多个Client个进行通讯(即形成一个聊天室的功能)。我们可以在Client输入信息给Server。但是,怎么将信息发送到每个Client(包括将信息发送到Server的Client)?

------解决方案--------------------
Server中要保存所有Client的Socket,可以放在一个集合中,循环这个集合,取出每个client的Socket,然后发送信息。
------解决方案--------------------
我的代码给你参考:
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

import javax.swing.JLabel;
import javax.swing.JTextArea;


public class GetMessage extends Thread{
private int i;
String v;

JLabel label=null;
private JTextArea text;
Date d=new Date();
SimpleDateFormat matter=new SimpleDateFormat("yyyy年MM月dd日HH时mm分ss秒");
public GetMessage(int i,JTextArea text) {

this.i=i;
this.text=text;
}

public void run(){
try {
ServerSocket so = new ServerSocket(i);
Socket s = so.accept();
while(true){
InputStreamReader i = new InputStreamReader(s.getInputStream());
BufferedReader b = new BufferedReader(i);
v= b.readLine();
text.append(String.valueOf(matter.format(d))+"\n");
text.append("对方说"+v+"\n");
}
} catch (IOException e) {
System.out.println(e.getMessage());
//label.setText("对方已经下线");
text.append("对方下线了。。。");
}
}
}


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;
import java.net.UnknownHostException;

import javax.swing.JLabel;
import javax.swing.JTextArea;
import javax.swing.JTextField;


public class SendMessage extends Thread {
private String ip;
private int i;
Socket s = null;
JLabel label=null;
JTextField text;
JTextArea text1;

public SendMessage(String ip,int i,JTextArea text1) {
// TODO Auto-generated constructor stub
this.ip=ip;
this.i=i;
this.text1=text1;
  
}


public void run(){
  
while(true){
try {
s = new Socket(ip,i);
text1.setText("连接成功"+"\n");
break;
} catch (Exception e) {
try {
Thread.sleep(1000);
} catch (InterruptedException e1) {
System.out.println("出错了。。。。");
}
}
}
  
}
  
public void send(String message)
{
try {



PrintStream p = new PrintStream(s.getOutputStream());

p.println(message);

  
} catch (Exception e1) {
System.out.println("异常"+e1.getMessage());
}
}


}


------解决方案--------------------
已经使用bs架构写过类似程序,使用的是javascript每隔一段时间向服务器发送一次请求
------解决方案--------------------
使用socket通信,以流的方式将要传送的信息写进socket就可以了,接收方accept就行了
------解决方案--------------------
http://download.csdn.net/detail/lxybelieve/3764363
------解决方案--------------------
该进版:
GetMessage.java服务端:

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

import javax.swing.JLabel;
import javax.swing.JTextArea;