java socket 局域网聊天程序

windcolor88 2011-06-23 07:41:10
Socket 网络编程
//Message
package com.common;

import java.io.Serializable;

public class Message implements Serializable{
private static final long serialVersionUID = 1L;

public String type="";
public String message="";
public Message(){
type="1";
message="ok";
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;

}

}
//Client
package com.client;

import java.net.*;
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.io.*;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;

import com.common.Message;

public class Client extends JFrame implements ActionListener,KeyListener{
/**
*
*/
private static final long serialVersionUID = 1L;
JTextArea jta=null;
JTextField jtf=null;
JButton jb=null;
JPanel jp=null;
JScrollPane jsp=null;
Socket s=null;

ObjectInputStream ois=null;
ObjectOutputStream oos=null;


//receiveMessage rm;
public Client(/*Socket s*/){
//this.s=s;
jta=new JTextArea();
jta.setEditable(false);
jtf=new JTextField(35);
jtf.addKeyListener(this);
jb=new JButton("send");
jb.addActionListener(this);
jp=new JPanel();
jsp=new JScrollPane(jta);
jp.add(jtf);
jp.add(jb);
this.add(jsp,"Center");
this.add(jp,"South");
this.setSize(500, 400);
this.setTitle("client");
this.setVisible(true);

this.addWindowListener(new WindowAdapter() {

public void windowClosing(WindowEvent e) {

//System.out.print("Closing");
System.exit(0);
}
});
try{
s=new Socket("127.0.0.1",9999);
ois=new ObjectInputStream(s.getInputStream());
oos=new ObjectOutputStream(s.getOutputStream());

// while(true){
// String info=br.readLine();
// jta.append("server said:"+info+"\n");
// }
new ReceiveMessage().run();
}catch(Exception e){
e.printStackTrace();
}
}

@Override
public void actionPerformed(ActionEvent e) {
Message m=new Message();
if(e.getSource()==jb){
String info=jtf.getText();
System.out.println(info);

m.setMessage(info);
try {
oos.writeObject(m);
} catch (IOException e1) {

e1.printStackTrace();
}
jta.append("you said:"+info+"\n");
jtf.setText("");
}
}
public class ReceiveMessage extends Thread{
public void run(){
try{
while(true){
Message m=(Message)ois.readObject();
String info=m.getMessage();
jta.append("client said:"+info+"\n");
}

}catch(Exception e){
e.printStackTrace();
}

}
}
@Override
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub

}

@Override
public void keyPressed(KeyEvent e) {
// TODO Auto-generated method stub
if(e.getKeyCode()==KeyEvent.VK_ENTER){
String info=jtf.getText();
Message m=new Message();
m.setMessage(info);
try {
oos.writeObject(m);
} catch (IOException e1) {

e1.printStackTrace();
}
jta.append("you siad:"+info+"\n");

jtf.setText("");
}
}

@Override
public void keyReleased(KeyEvent e) {
// TODO Auto-generated method stub

}
}
//Server
package com.server;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;

import com.common.Message;


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.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.PrintWriter;
import java.net.*;

public class Server extends JFrame implements ActionListener,KeyListener{
/**
*
*/
private static final long serialVersionUID = 1L;
JTextArea jta=null;
JTextField jtf=null;
JButton jb=null;
JPanel jp=null;
JScrollPane jsp=null;

ServerSocket ss=null;
Socket s=null;
ObjectInputStream ois=null;
ObjectOutputStream oos=null;

public Server(/*Socket s*/){
//this.s=s;
jta=new JTextArea();
jta.setEditable(false);
jtf=new JTextField(35);
jtf.addKeyListener((KeyListener) this);

jb=new JButton("send");
jb.addActionListener(this);
jp=new JPanel();
jsp=new JScrollPane(jta);
jp.add(jtf);
jp.add(jb);
this.add(jsp,"Center");
this.add(jp,"South");
ImageIcon test = new ImageIcon("\\image\\QQLogin.png");
setIconImage(test.getImage());
this.setSize(500, 400);
this.setTitle("Server");
this.setVisible(true);
this.addWindowListener(new WindowAdapter() {

public void windowClosing(WindowEvent e) {

System.exit(0);
}
});

try{
ss=new ServerSocket(9999);
s=ss.accept();
ois=new ObjectInputStream(s.getInputStream());
oos=new ObjectOutputStream(s.getOutputStream());

new ReceiveMessage().run();
}catch(Exception e){
e.printStackTrace();
}


}


@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(e.getSource()==jb){
String info=jtf.getText();
Message m=new Message();
m.setMessage(info);
try {
oos.writeObject(m);
} catch (IOException e1) {

e1.printStackTrace();
}
jta.append("you siad:"+info+"\n");

jtf.setText("");
}
}
public class ReceiveMessage extends Thread{
public void run(){
try{
while(true){
Message m=(Message)ois.readObject();
String info=m.getMessage();
jta.append("client said:"+info+"\n");
}
}catch(Exception e){
e.printStackTrace();
}

}
}

public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub

}


@Override
public void keyPressed(KeyEvent e) {
// TODO Auto-generated method stub
if(e.getKeyCode()==KeyEvent.VK_ENTER){
String info=jtf.getText();
Message m=new Message();
m.setMessage(info);
try {
oos.writeObject(m);
} catch (IOException e1) {

e1.printStackTrace();
}
jta.append("you siad:"+info+"\n");

jtf.setText("");
}
}



public void keyReleased(KeyEvent e) {
// TODO Auto-generated method stub

}



}


Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at com.client.Client.actionPerformed(Client.java:89)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.Component.processMouseEvent(Component.java:6437)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
at java.awt.Component.processEvent(Component.java:6202)
at java.awt.Container.processEvent(Container.java:2213)
at java.awt.Component.dispatchEventImpl(Component.java:4793)
at java.awt.Container.dispatchEventImpl(Container.java:2271)
at java.awt.Component.dispatchEvent(Component.java:4619)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4816)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4476)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4406)
at java.awt.Container.dispatchEventImpl(Container.java:2257)
at java.awt.Window.dispatchEventImpl(Window.java:2677)
at java.awt.Component.dispatchEvent(Component.java:4619)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:662)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
...全文
160 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
AwarriorLNTS 2011-07-17
  • 打赏
  • 举报
回复
应该加注释!!!
Darling_sheep 2011-06-25
  • 打赏
  • 举报
回复
邮件已经发送!
windcolor88 2011-06-24
  • 打赏
  • 举报
回复
好的.谢谢你。我的邮箱:xiaoxubo214@163.com
Darling_sheep 2011-06-24
  • 打赏
  • 举报
回复
我刚做好了一个基于后台服务器转发的支持多人聊天的聊天工具,想看的话在CSDN里面给我留个言,写下你的邮箱我给你发一份。互相交流!
windcolor88 2011-06-24
  • 打赏
  • 举报
回复
谢谢各位的指点
hxs_aj 2011-06-24
  • 打赏
  • 举报
回复
代码也是需要注释的,这样的代码见到就觉得烦了都,没有注释不容易啊
tingshun1989 2011-06-24
  • 打赏
  • 举报
回复
同学,你写这么长的代码。应该先写个思路然后再文中注释吧,不然别人看你代码很累的
randyjiawenjie 2011-06-23
  • 打赏
  • 举报
回复
我调试一下。Client中的
try {
oos.writeObject(m);
} catch (IOException e1) {

一点击发送按钮,这里就出现了一个空指针异常。是oos为null。而oos是在Client的构造器中产生的,
s=new Socket("127.0.0.1",9999);
ois=new ObjectInputStream(s.getInputStream());
oos=new ObjectOutputStream(s.getOutputStream());

觉得问题在这里。但是怎么改,我现在还不太清楚。
另外,启动一个新线程应该是new thread.start()吧,而你都是new thread.run()。
chenchenyangll 2011-06-23
  • 打赏
  • 举报
回复
这代码太长 = =
windcolor88 2011-06-23
  • 打赏
  • 举报
回复
//Client
public static void main(String[] args) {
Client client=new Client();

}
//Server
public static void main(String[] args) {
Server server=new Server();

}
randyjiawenjie 2011-06-23
  • 打赏
  • 举报
回复
Client类和Server的main方法都没有。。。。

62,635

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧