您的位置:首页 > 编程语言 > Java开发

java实现客户端一键群发消息完整代码

2013-12-16 17:13 597 查看
客服端代码
package rediobroadcast;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;
/**
*
* @author Administrator
*/
public class Broadcast extends javax.swing.JFrame {
static Socket skt; //客户端socket
static OutputStream os; //客户端输出流
static InputStream is;//客户端输入流

/** Creates new form Broadcast */
public Broadcast() {
initComponents(); // 界面 这里的代码是自动生成故此没写
connection_Button.setEnabled(false);
this.setTitle("BroudCast window");
BroadcastC.setLineWrap(true);// 显示消息的JTextArea 设置为自动换行
content.setLineWrap(true);//将发送的JTextArea 设置为自动换行
}
lass receive extends Thread{

receive(){
os=skt.getOutputStream();
is=skt.getInputStream();
}
@Override
public void run(){
byte[] bt = new byte[100];
int length = 0;
while(true){
try {
length = is.read(bt); //接受服务端消息
String send = new String(bt, 0, length);
if (send.indexOf("@") == 0) { //消息首字母为@ 则为群发消息
BroadcastC.append("广播信息:\n" + send.substring(1, send.length()) + "\n");
}
else
{
BroadcastC.append("服务器信息:\n" + send + "\n");
}
} catch (IOException ex) {
Logger.getLogger(Broadcast.class.getName()).log(Level.SEVERE, null, ex);
}
}
}

}
private void connection_Button ActionPerformed(java.awt.event.ActionEvent evt) {

try {

int port1 = Integer.valueOf(port.getText());//port1 界面输入服务端端口号
//建立客户端socket
skt = new Socket(ip.getText(), port1); //ip 界面输入的服务端ip地址
if(skt.isConnected()){
JOptionPane.showMessageDialog(null, "连接服务器成功");
send_Button.setEnabled(true);//设置客户端 发送button 可用
connection_Button.setEnabled(false);//设置 connection-button为不可用
BroadcastC.append("连接服务器成功\n"); //消息提示
}
new receive().start(); //新建线程接受服务端信息
} catch (Exception e) {
JOptionPane.showMessageDialog(null, "连接服务器失败,请重新连接");
BroadcastC.append("连接服务器失败\n");
}
// TODO add your handling code here:
}

private void send_ButtonPerformed(java.awt.event.ActionEvent evt) {

String s = content.getText(); //获取要发送的消息
try {
if(s!=null){
os.write(s.getBytes()); //发送消息
BroadcastC.append("我说:\n" + s + "\n");
content.setText("");
s="";
}
} catch (Exception e) {
}

// TODO add your handling code here:
}
服务端代码
package chatserver;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Vector;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
*
* @author Administrator
*/

public class server {

static Vector<Socket> vt=new Vector<Socket>(); // 用来保存每个客户端的socket
static String sendMsg=null;// 群发消息存储
static ServerSocket ss; //服务端serversocket

public static void main(String args[]){
try {
ss = new ServerSocket(1126);
} catch (IOException ex) {
Logger.getLogger(server.class.getName()).log(Level.SEVERE, null, ex);
}

new serverSocket(ss).start(); //新建启动服务进程
}
static void sendall(Socket s){ // 群发方法 s为发送消息的客户端 socket
System.out.println("——————jinru——————");
OutputStream os;
for(int i=0;i<vt.size();i++){
Socket t=(Socket)vt.get(i);
try {
System.out.println(t.toString());
os=t.getOutputStream();
os.write(sendMsg.getBytes());
} catch (IOException e) {
// TODO Auto-generated catch block
}
}
System.out.println("——————exit——————");
}

}
class serverSocket extends Thread{
private ServerSocket ss;
private boolean b=true;
serverSocket(ServerSocket ss){
this.ss=ss;
}
@Override
public void run(){
try {
while(true){
Socket s = ss.accept(); //等待客户端连接
//防止客户端重复连接
for(int i=0;i<server.vt.size();i++){

if(server.vt.get(i).toString().equals(s.toString()))b=false; //判断是否是重复连接

}
if(b!=false){
server.vt.add(s); //把当前socket保存到vector中
createClient client= new createClient(s); //客户端连接到来 单独新建线程服务 这个客户端
client.start();
}
}
} catch (IOException ex) {
System.out.println(ex);
}
}
}
class createClient extends Thread{
Socket s;
OutputStream os;
InputStream in;
byte [] bt;
String receive=null;
createClient(Socket s){
this.s=s;
}
@Override
public void run(){
try{
os=s.getOutputStream();
in = s.getInputStream();
bt=new byte[100];
}catch(Exception e){}
while(true){
try {
int len=in.read(bt); //读取客户端消息
receive=new String(bt,0,len);
if (receive.indexOf("@") == 0) { // 如果消息头是@ 则判断要群发
server.sendMsg=receive; //把消息保存到 全局变量sendMsg
server.sendall(s); //调用群发方法
}
else{
os.write(receive.getBytes());//不是群发直接发送给原客户端
}
} catch (IOException ex) {
Logger.getLogger(createClient.class.getName()).log(Level.SEVERE, null, ex);
}
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Socket package import