本人前几天刚写了一个,虽说不是你要的那种聊天,发出来,让你参考一下。。
客户端:
package newpackage;
import *;
import *;
import java.util.Scanner;
public class Client {
BufferedReader in = null;
PrintWriter out = null;
Socket socket = null;
String message = null;
Scanner cin = new Scanner(System.in);
public static void main(String[] args) throws Exception, IOException {
new Client(new Socket("127.0.0.1", 8880));
}
public Client(Socket socket) {
this.socket = socket;
try {
in = new BufferedReader(new InputStreamReader(
socket.getInputStream()));
out = new PrintWriter(socket.getOutputStream());
} catch (IOException e) {
e.printStackTrace();
}
// init receiver thread
Receiver receiver = new Receiver();
Thread tReceiver = new Thread(receiver);
tReceiver.start();
// init sender thread
Send send = new Send();
Thread tsend = new Thread(send);
tsend.start();
}
public void printMenu() {
System.out.println("注册的命令<register@name=用户名/>");
System.out.println("登陆的命令<login@name=用户名/>");
System.out.println("发送信息的命令<message@from=用户名@to=用户名@message=message>");
System.out.println("注销的命令<logout@name=用户名/> ");
}
private class Send implements Runnable {
@Override
public void run() {
printMenu();
while (cin.hasNext()) {
String
mes = cin.next();
out.println(mes);
out.flush();
System.out.print(mes);
}
}
}
private class Receiver implements Runnable {
@Override
public void run() {
try {
while (true) {
message = in.readLine();
System.out.println(message);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
服务器端:
package newpackage;
import
import
import java.util.*;
public class Server {
public static void main(String[] args) {
try {
ServerSocket server=new ServerSocket(8880);
while(true){
Socket socket=server.accept();
System.out.println("hello");
SocketHandle handle=new
SocketHandle(socket);
Thread thread=new Thread(handle);
thread.start();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
package newpackage;
import ch3.*;
import *;
import
import java.util.*;
public class SocketHandle implements Runnable {
static
boolean isLogin,state;
static List<String>l=new ArrayList<String>();
static HashMap cl=new HashMap();
private Socket socket;
BufferedReader br;
PrintWriter pw;
//
HashMap<Integer,String> hm;
public SocketHandle( Socket socket){
this.socket=socket;
try{
br=new BufferedReader(new InputStreamReader(socket.getInputStream()));
pw=new PrintWriter(socket.getOutputStream());
}catch(Exception e){
e.printStackTrace();
}
}
public void writera(PrintWriter pw,String getmess)throws Exception{
if(getmess.contains("register")){
int t=getmess.indexOf("=");
String getm=getmess.substring(t+1,getmess.length()-2);
if(l.contains(getm)){
pw.println("<result command=”register” state=”error” message=”” />");
pw.flush();
}else{
l.add(getm);
System.out.println(getm);
pw.println(" <result command=”register” state=”ok” />");
pw.flush();
}
}else if(getmess.contains("login")){
System.out.println("login");
int t=getmess.indexOf("=");
String getm=getmess.substring(t+1,getmess.length()-2);
System.out.println(getm+"dfdfdfddfdf"+getm.equals(l.get(0)));
if(!state&&isOr(getm)){
pw.println("<result command=” login ” state=”ok” />");
pw.flush();
isLogin=true;
try{
cl.put(getm, socket);
}catch(Exception e){
e.printStackTrace();
}
}
else {
pw.println("<result command=”login” state=”error” message=”” />;");
pw.flush();
}
}else if(getmess.contains("message")){
if(isLogin){
int i1=getmess.indexOf("to");
int i2=getmess.lastIndexOf("@");
String str=getmess.substring(i1+3, i2);
System.out.println("hhhhhhhhhh"+str);
if(cl.containsKey(str)){
pw.println("<result command=” message ” state=”ok” />;");
pw.flush();
sendmessage(str,getmess);
}else{
pw.println("你要发送的用户没有注册");
pw.flush();
}
//
hm.put(socket.getPort(), getmess);
}else{
pw.println("请登录。。。。。。");
pw.flush();
}
}else if(getmess.contains("logout")){
if(!state){
int t=getmess.indexOf("=");
String getm=getmess.substring(t+1,getmess.length()-2);
pw.println("<result command=” logout ” state=”ok” />");
pw.flush();
l.remove(getm);
}
else {
pw.println("<result command=”loginout” state=”error” message=”” />");
pw.flush();
}
}else{
pw.println("输入信息有误");
pw.flush();
}
}
public boolean isOr(String mess){
for(int j=0;j<l.size();j++){
if(mess.equals(l.get(j)))return true;
}
return false;
}
@Override
public void run() {
try{
while(!state){
String getmess=br.readLine();
writera(pw,getmess);
}
}catch(Exception e){
e.printStackTrace();
}finally{
try{
pw.close();
br.close();
socket.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
private void sendmessage(String name ,String mess)throws Exception {
Socket dos=(Socket)cl.get(name);
PrintWriter pw=new PrintWriter(dos.getOutputStream());
pw.println(mess);
pw.flush();
System.out.println("怎么了,");
System.out.println(cl.size());
}
}