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);
}
}
}
}
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);
}
}
}
}
相关文章推荐
- ios消息推送客户端和服务端实现带代码(java)
- java udp网络编程及实例代码,实现客户端和服务端通信
- 算法#13--红黑树完整代码Java实现
- redis集群环境搭建以及java中jedis客户端集群代码实现 博客分类: redis
- 如何编写出高效的数据库连接池(附带完整代码C#和Java实现)
- 利用Java 代码创建ftp客户端并实现上传下载等功能
- [JAVA]多人聊天室控制台实现,服务端向所有客户端下发消息实现
- Activemq 消息发送、接收java代码实现队列模式
- java实现简易计算器完整代码
- 如何编写出高效的数据库连接池(附带完整代码C#和Java实现)
- Java代码实现如何获取客户端的IP
- java中自己实现一个服务端对应多个客户端的简单代码
- JAVA AIO 服务器与客户端实现示例(代码2)
- 使用log4cplus实现的分目录存放日志服务器完整工程+关键客户端代码
- java 代码模拟androidpn消息推送客户端(测试)
- JAVA实现服务器和客户端的单播/广播消息转发的Socket编程(有图形用户界面)
- Java中实现FTP上传下载文件的功能,完整代码
- java TCP编程简单实现一个消息群发功能
- C#DES加密,JavaDES解密,另转C#和Java实现Des完整代码
- (11)java代码实现回复video类型的消息