局域网内聊天

服务器:
package chat;
import java.io.;
import java.net.
;
import java.util.*;

import javax.swing.JTextArea;

import chat.screen.bbb;
public class server {
HashSet allsocket=new HashSet<>();
ServerSocket s;
static HashSet people=new HashSet();
public server() {
try {
s=new ServerSocket(4118);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void startserver() throws IOException {
while(true) {
System.out.println(“等待进入”);
Socket socket=s.accept();
allsocket.add(socket);
Serverthread se=new Serverthread(socket);
se.start();
}
}
class Serverthread extends Thread{
Socket s;
public Serverthread(Socket socket) {
this.s=socket;

	}
	@Override
	public void run() {
		 BufferedReader br=null;
		 String abc=s.getLocalAddress().getHostAddress();
		 
		 try {
			br=new BufferedReader(new InputStreamReader(s.getInputStream()));
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		 while(true) {
			 try {
				String str=br.readLine();
				sendallclient(str);
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			 
		 }
	}
	public void sendallclient(String str){
		 for(Socket s:allsocket) {
			 BufferedWriter bw;
			try {
				bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
				bw.write(str);
				bw.newLine();
				bw.flush();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
		 }
	}
}
public static void main(String args[]) {
	server a1=new server();
	try {
		a1.startserver();
	} catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
}

}

客户机:
package chat;

import java.io.;
import java.io.IOException;
import java.net.
;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class client {
static JFrame a=new JFrame();

JLabel displayusername;
JButton send;
String username;
Socket Client;
 static BufferedReader br;
 static BufferedWriter bw;
static String abc;
client(String ip,int port,String username){
	this.username=username;
	try {
		Client=new Socket(ip,port);
		br=new BufferedReader(new InputStreamReader(Client.getInputStream()));
		bw=new BufferedWriter(new OutputStreamWriter(Client.getOutputStream()));
		screen ac=new screen(this.username);
		server.people.add(username);
	    
		client.abc=Client.getLocalAddress().getHostAddress();
	} catch (UnknownHostException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	} catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
}
  public static  void sendmessage(String a) {
	  try {
		bw.write(a);
		bw.newLine();
    	  bw.flush();
	} catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
	  
  }

public static String receivemessage() {
String a=null;
try {
a=br.readLine();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return a;
}

}

界面:
package chat;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.net.Socket;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashSet;

import javax.swing.*;
import javax.swing.text.DefaultCaret;

public class screen {
static String b;
static JFrame a = new JFrame();
JLabel displayusername;
JButton send;
static String username;
static JTextArea receivemessage = new JTextArea(30, 60);
static JTextArea number = new JTextArea(20, 20);
Date date1 = new Date();
SimpleDateFormat format = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss”);
static int flag=-1;
static int flag2=0;
static int i=0;
public screen(String a1) {
username = a1;
b = username;
JLabel c5 = new JLabel(b);
a.setBounds(600, 600, 1450, 600);
Container c = a.getContentPane();
c.setLayout(new FlowLayout());
JScrollPane jsp = new JScrollPane(receivemessage);
DefaultCaret caret = (DefaultCaret) receivemessage.getCaret();
caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);
jsp.setBounds(13, 10, 350, 340);
jsp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
JScrollPane jsp2=new JScrollPane(number);
jsp2.setBounds(20, 20, 350, 340);;
jsp2.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
DefaultCaret caret1 = (DefaultCaret) number.getCaret();
caret1.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);
JTextField sendmessage = new JTextField(30);
sendmessage.setFont(new Font(“黑体”, Font.PLAIN, 15));
receivemessage.setEditable(false);
number.setEditable(false);
Button send = new Button(“发送”);
aaa aa = new aaa();
aa.start();
bbb bb=new bbb();
bb.start();
a.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
super.windowClosing(e);
client.sendmessage(username+“Exit”);
server.people.remove(username);
}
public void windowOpened(WindowEvent e) {
super.windowOpened(e);
bbb b=new bbb();
b.start();
// server.people.add(username);
// StringBuffer a2=new StringBuffer();
// for(String s:server.people)
// a2.append(s+" “);
// client.sendmessage(a+“Enter”+“当前在线人数”+server.people.size());
//
}
});
send.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String a = username + " " + format.format(date1) + “\n” + sendmessage.getText();
if (!a.equals(” “)) {
client.sendmessage(a);
sendmessage.setText(”");
}
}

	});
	sendmessage.addKeyListener(new KeyListener() {
		@Override
		public void keyTyped(KeyEvent e) {
			if (e.getKeyChar() == KeyEvent.VK_ENTER) {
				String a = username + " " + format.format(date1) + "\n" + sendmessage.getText();
				if (!a.equals(" ")) {
					client.sendmessage(a);
					sendmessage.setText("");
				}
			}
		}
		@Override
		public void keyPressed(KeyEvent e) {

// if(e.getKeyChar()==KeyEvent.VK_ESCAPE)
// number.setEditable(false);
}
@Override
public void keyReleased(KeyEvent e) {
// TODO Auto-generated method stub
}
});
a.add(c5);
c.add(jsp);
c.add(sendmessage);
c.add(send);
c.add(jsp2);
a.setVisible(true);
}
class aaa extends Thread {
public void run() {
while (true) {
String a5 = null;
if ((a5 = client.receivemessage()) != null)
if(a5.contains(“Exit”))
number.setText(number.getText()+"\n"+a5);
else if(a5.contains(“Enter”))
number.setText(number.getText()+"\n"+a5);
else receivemessage.setText(receivemessage.getText() + “\n” + a5);
}
}
}
class bbb extends Thread{
public void run() {
for(String s:server.people)
{client.sendmessage(s+“Enter”);
}
}
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值