服务方:
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
import javax.swing.JButton;
import javax.swing.JScrollPane;
import javax.swing.event.AncestorListener;
import java.io.*;
import java.net.*;public class server {
private JTextArea recevieArea;
private JTextArea sentArea;
private JButton submitbutton;
private static ServerSocket serverSocket;
private static Socket socket;
private BufferedReader br;
private DataOutputStream dos;
private DataInputStream dis;
private String s = ""; public server() {
} class frame extends JFrame {
public frame() {
setResizable(false);
setVisible(true);
this.setBounds(300, 200, 350, 300);
this.setTitle("Server");
panel p = new panel();
Container c = getContentPane();
setDefaultCloseOperation(EXIT_ON_CLOSE);
c.add(p);
show();
repaint(); }
} class panel extends JPanel {
public panel() { this.setBorder(null); submitbutton = new JButton("sent");
submitbutton.setBounds(236, 200, 66, 35);
add(submitbutton);
setLayout(null);
submitbutton.addActionListener(new lis()); final JScrollPane scrollPane = new JScrollPane();
scrollPane.setBounds(10, 10, 220, 99);
add(scrollPane); recevieArea = new JTextArea(5, 20);
scrollPane.setViewportView(recevieArea);
recevieArea.setLineWrap(true); final JScrollPane scrollPane_1 = new JScrollPane();
scrollPane_1.setBounds(10, 134, 220, 101);
add(scrollPane_1); sentArea = new JTextArea(5, 20);
scrollPane_1.setViewportView(sentArea);
sentArea.setLineWrap(true);

}
}class lis implements ActionListener { public void actionPerformed(ActionEvent e) {
if(e.getSource()==submitbutton){
try{
dos = new DataOutputStream(socket.getOutputStream());
s = sentArea.getText();
recevieArea.append(s+"\n");
sentArea.setText("");
socket.getOutputStream();
}catch(Exception ee){
System.out.print(ee.getMessage());
}
}
}
} public static void main(String args[]) throws Exception {
new server().new frame();
// while(true){
try {
serverSocket = new ServerSocket(5678);
socket = serverSocket.accept();
System.out.print("linked!");
}catch (Exception ee) {
System.out.print(ee.getMessage());
}
// }
}
}
客户端:
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
import javax.swing.event.AncestorListener;
import java.io.*;
import java.net.*;public class client {
private JTextArea recevieArea;
private JTextArea sentArea;
private JButton submitbutton;
private static Socket socket;
private PrintWriter pw;
static DataInputStream is;
DataOutputStream dos;
private String s="";
public client(){
}
class frame extends JFrame{
public frame(){
setResizable(false);
setVisible(true);
this.setBounds(300,200,350,300);
this.setTitle("Client");
panel p = new panel();
Container c = getContentPane();
setDefaultCloseOperation(EXIT_ON_CLOSE);
c.add(p);
show();
repaint();

}
} class lis implements ActionListener { public void actionPerformed(ActionEvent e) {
if(e.getSource()==submitbutton){
try{
dos = new DataOutputStream(socket.getOutputStream());
s = sentArea.getText();
recevieArea.append(s+"\n");
sentArea.setText("");
socket.getOutputStream();
}catch(Exception ee){
System.out.print(ee.getMessage());
}
}
}
}

class panel extends JPanel{
public panel(){
this.setBorder(null);

submitbutton = new JButton("sent");
submitbutton.setBounds(236, 200, 66, 35);
add(submitbutton);
submitbutton.addActionListener(new lis());
setLayout(null); final JScrollPane scrollPane = new JScrollPane();
scrollPane.setBounds(10, 10, 220, 99);
add(scrollPane);

recevieArea = new JTextArea(5,20);
scrollPane.setViewportView(recevieArea);
recevieArea.setLineWrap(true);

final JScrollPane scrollPane_1 = new JScrollPane();
scrollPane_1.setBounds(10, 134, 220, 101);
add(scrollPane_1);

sentArea = new JTextArea(5,20);
scrollPane_1.setViewportView(sentArea);
sentArea.setLineWrap(true);
}
} public static void main(String args []){
new client().new frame();
try{
socket = new Socket("127.0.0.1",5678);
System.out.print("linked!");
is = new DataInputStream(socket.getInputStream());

}catch(Exception e){

}
}
}

解决方案 »

  1.   

    你的程序思路不太清晰,给你帖一个前天帮别人的一个通信程序.可以每隔1秒从服务器发一条信息向客户端,支持多线程,
    但没有处理连接断开的问题.
    serverpackage D21.M2.Y2008;import java.awt.*;
    import java.awt.event.*;
    import java.io.*;
    import java.net.*;
    import java.util.*;public class Server2 extends Frame{
    DataInputStream dis;
    DataOutputStream dos;
    ServerSocket ss;
    Socket s;
    TextArea ta = new TextArea();
    ArrayList<Socket> al = new ArrayList<Socket>();

    public Server2() {
    super("Server");
    add(ta);
    setSize(200, 200);
    setVisible(true);
    pack();
    addWindowListener(new WindowAdapter() {
    public void windowClosing(WindowEvent e) {
    System.exit(0);
    }
    });
    try {
    ss = new ServerSocket(5555);
    } catch (IOException e1) {
    e1.printStackTrace();
    }
    connection();
    }

    private void connection() {
    while(true) {
    try {
    s = ss.accept();
    al.add(s);
    new Thread(new serverThread(al)).start();
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    } public static void main(String[] args) {
    Server2 s = new Server2();
    } class serverThread implements Runnable {
    Socket s;
    ArrayList<Socket> al;
    serverThread(ArrayList<Socket> al) {
    this.al = al;
    }
    public void run() {
    while(true) {
    try {
    for (int i=0; i<al.size(); i++) {
    s = al.get(i);
    dos = new DataOutputStream(s.getOutputStream());
    dos.writeUTF("send a message" + new Date());
    ta.append("a message is sended\n");
    }
    Thread.sleep(1000);
    } catch (IOException e) {
    e.printStackTrace();
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    }
    }
    }}client
    package D21.M2.Y2008;import java.awt.*;
    import java.awt.event.*;
    import java.io.*;
    import java.net.*;import javax.swing.*;
    import javax.swing.text.BadLocationException;
    import javax.swing.text.StyledDocument;public class Client extends JFrame implements Runnable, ActionListener {
    DataInputStream dis;
    DataOutputStream dos;
    StyledDocument doc;
    Socket s;
    JTextPane jtp = new JTextPane();
    JScrollPane jsp = new JScrollPane(jtp);
    TextArea ta = new TextArea();
    Button b1 = new Button("弹出");

    Client() {
    super("Client");
    doc = jtp.getStyledDocument();
    setSize(400, 200);
    add(jsp, BorderLayout.CENTER);
    add(b1, BorderLayout.SOUTH);
    b1.addActionListener(this);
    jsp.setForeground(Color.RED);
    addWindowListener(new WindowAdapter() {
    public void windowClosing(WindowEvent e) {
    System.exit(0);
    }
    });
    setVisible(true);
    connection();
    }

    private void connection() {
    try {
    s = new Socket("127.0.0.1", 5555);
    } catch (UnknownHostException e) {
    e.printStackTrace();
    } catch (IOException e) {
    e.printStackTrace();
    }
    } public static void main(String[] args) {
    new Thread(new Client()).start();
    } public void run() {
    while(true) {
    try {
    dis = new DataInputStream(s.getInputStream());
    String str = dis.readUTF();
    try {
    int nowPositon = doc.getLength();
    doc.insertString(nowPositon, str + "\n", null);
    // this.jtp.setCaretPosition(this.jtp.getText().length());
    this.jtp.setCaretPosition(jtp.getDocument().getLength());
    } catch (BadLocationException e) {
    e.printStackTrace();
    }
    } catch (IOException e) {
    e.printStackTrace();
    }

    }
    } public void actionPerformed(ActionEvent e) {
    if (e.getSource() == b1) {
    new TestDialog(this);
    }
    }

    class TestDialog extends Dialog implements ActionListener {
    Button b1 = new Button("关闭");
    TestDialog(Frame f) {
    super(f, "Dialog", true);
    setLocation(f.getX(), f.getY());
    setSize(50, 50);
    add(new Label("测试是否与对话框有关系"), BorderLayout.CENTER);
    add(b1, BorderLayout.SOUTH);
    b1.addActionListener(this);
    addWindowListener(new WindowAdapter() {
    public void windowClosing(WindowEvent e) {
    setVisible(false);
    }
    });
    pack();
    setVisible(true);
    }

    public void actionPerformed(ActionEvent e) {
    if (e.getSource() == b1) {
    setVisible(false);
    }
    }

    }}
      

  2.   

    你好像没有用write()方法向客户端发送消息,
    然后在客户端也没有用readUIF()方法读取
    比如:
    String a=new String(dos.readUIF());
    System.out.println(a);
    要互相通信
    客户端要建立输入流和输出流
    服务段也要建立输入流和输出流
      

  3.   

    我的现在两端发消息对方可以在控制台显示到文字,但TextArea怎么都显示不到,不知哪里有问题,有谁会呢?我愿100加分送出。
    服务端import java.awt.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import javax.swing.*;
    import javax.swing.JButton;
    import javax.swing.JScrollPane;
    import javax.swing.event.AncestorListener;
    import java.io.*;
    import java.net.*;public class server {
    private JTextArea recevieArea;
    private JTextArea sentArea;
    private JButton submitbutton;
    private static ServerSocket serverSocket;
    private static Socket socket;
    private static DataOutputStream dos;
    private static DataInputStream dis;
    private static String s = "";
    private static String disstr = "";
    public server() {
    } class frame extends JFrame {
    public frame() {
    setResizable(false);
    setVisible(true);
    this.setBounds(300, 200, 350, 300);
    this.setTitle("Server");
    panel p = new panel();
    Container c = getContentPane();
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    c.add(p);
    show();
    repaint(); }
    } class panel extends JPanel {
    public panel() { this.setBorder(null); submitbutton = new JButton("sent");
    submitbutton.setBounds(236, 200, 66, 35);
    add(submitbutton);
    setLayout(null);
    submitbutton.addActionListener(new lis()); final JScrollPane scrollPane = new JScrollPane();
    scrollPane.setBounds(10, 10, 220, 99);
    add(scrollPane); recevieArea = new JTextArea(5, 20);
    scrollPane.setViewportView(recevieArea);
    recevieArea.setLineWrap(true);
    recevieArea.append(disstr);
    final JScrollPane scrollPane_1 = new JScrollPane();
    scrollPane_1.setBounds(10, 134, 220, 101);
    add(scrollPane_1); sentArea = new JTextArea(5, 20);
    scrollPane_1.setViewportView(sentArea);
    sentArea.setLineWrap(true);

    }
    }class lis implements ActionListener { public void actionPerformed(ActionEvent e) {
    if(e.getSource()==submitbutton){
    try{
    dos = new DataOutputStream(socket.getOutputStream());
    s = sentArea.getText();
    recevieArea.append(s+"\n");
    sentArea.setText("");
    dos.writeUTF(s);
    socket.getOutputStream();
    }catch(Exception ee){
    System.out.print(ee.getMessage());
    }
    }
    }
    } public static void main(String args[]) throws Exception {
    new server().new frame();
    // while(true){
    try {
    serverSocket = new ServerSocket(5678);
    socket = serverSocket.accept();
    System.out.print("linked!");
    System.out.print(socket.getInputStream());
    dis = new DataInputStream(socket.getInputStream());
    disstr = dis.readUTF();
    System.out.println(disstr);
    System.out.println(dos);
    }catch (Exception ee) {
    System.out.print(ee.getMessage());
    }
    // }
    }
    }客户端:import java.awt.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import javax.swing.*;
    import javax.swing.event.AncestorListener;
    import java.io.*;
    import java.net.*;public class client {
    private JTextArea recevieArea;
    private JTextArea sentArea;
    private JButton submitbutton;
    private static Socket socket;
    static DataInputStream is;
    static DataOutputStream dos;
    private String s="";
    private static DataInputStream dis;
    private static String disstr = "";
    public client(){
    }
    class frame extends JFrame{
    public frame(){
    setResizable(false);
    setVisible(true);
    this.setBounds(300,200,350,300);
    this.setTitle("Client");
    panel p = new panel();
    Container c = getContentPane();
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    c.add(p);
    show();
    repaint();

    }
    } class lis implements ActionListener { public void actionPerformed(ActionEvent e) {
    if(e.getSource()==submitbutton){
    try{
    dos = new DataOutputStream(socket.getOutputStream());
    s = sentArea.getText();
    recevieArea.append(s+"\n");
    sentArea.setText("");
    socket.getOutputStream();
    dos.writeUTF(s);
    }catch(Exception ee){
    System.out.print(ee.getMessage());
    }
    }
    }
    }

    class panel extends JPanel{
    public panel(){
    this.setBorder(null);

    submitbutton = new JButton("sent");
    submitbutton.setBounds(236, 200, 66, 35);
    add(submitbutton);
    submitbutton.addActionListener(new lis());
    setLayout(null); final JScrollPane scrollPane = new JScrollPane();
    scrollPane.setBounds(10, 10, 220, 99);
    add(scrollPane);

    recevieArea = new JTextArea(5,20);
    scrollPane.setViewportView(recevieArea);
    recevieArea.setLineWrap(true);
    recevieArea.append(disstr);
    final JScrollPane scrollPane_1 = new JScrollPane();
    scrollPane_1.setBounds(10, 134, 220, 101);
    add(scrollPane_1);

    sentArea = new JTextArea(5,20);
    scrollPane_1.setViewportView(sentArea);
    sentArea.setLineWrap(true);

    }
    } public static void main(String args []){
    new client().new frame();
    try{
    socket = new Socket("127.0.0.1",5678);
    System.out.print("linked!");
    System.out.print(socket.getInputStream());
    dis = new DataInputStream(socket.getInputStream());
    disstr = dis.readUTF();
    System.out.println(disstr);
    System.out.println(dos);
    }catch(Exception e){
    }
    }
    }
      

  4.   

    程序中少了几句
    Server端
    import java.awt.Container;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.io.BufferedReader;
    import java.io.DataInputStream;
    import java.io.DataOutputStream;
    import java.net.ServerSocket;
    import java.net.Socket;import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.JTextArea;public class Server {
        private JTextArea recevieArea;
        private JTextArea sentArea;
        private JButton submitbutton;
        private static ServerSocket serverSocket;
        private static Socket socket;
        private BufferedReader br;
        private DataOutputStream dos;
        private DataInputStream dis;
        private String s = "";    public Server() {
        }    class frame extends JFrame {
            public frame() {
                setResizable(false);
                setVisible(true);
                this.setBounds(300, 200, 350, 300);
                this.setTitle("Server");
                panel p = new panel();
                Container c = getContentPane();
                setDefaultCloseOperation(EXIT_ON_CLOSE);
                c.add(p);
                setVisible(true);        }
        }    class panel extends JPanel {
            public panel() {            this.setBorder(null);            submitbutton = new JButton("sent");
                submitbutton.setBounds(236, 200, 66, 35);
                add(submitbutton);
                setLayout(null);
                submitbutton.addActionListener(new lis());            final JScrollPane scrollPane = new JScrollPane();
                scrollPane.setBounds(10, 10, 220, 99);
                add(scrollPane);            recevieArea = new JTextArea(5, 20);
                scrollPane.setViewportView(recevieArea);
                recevieArea.setLineWrap(true);            final JScrollPane scrollPane_1 = new JScrollPane();
                scrollPane_1.setBounds(10, 134, 220, 101);
                add(scrollPane_1);            sentArea = new JTextArea(5, 20);
                scrollPane_1.setViewportView(sentArea);
                sentArea.setLineWrap(true);
                
            }
        }class lis implements ActionListener {        public void actionPerformed(ActionEvent e) {
                if(e.getSource()==submitbutton){
                    try{
                    dos = new DataOutputStream(socket.getOutputStream());
                    dis = new DataInputStream(socket.getInputStream());
                    dos.writeUTF("返回客户端第一条");
                    s = sentArea.getText();
                    recevieArea.append(dis.readUTF()+"\n");
       
                 sentArea.setText("");
                    //socket.getOutputStream();
                    }catch(Exception ee){
                        System.out.print(ee.getMessage());
                    }
                }
            }
        }    public static void main(String args[]) throws Exception {
            new Server().new frame();
    //        while(true){
                try {
                    serverSocket = new ServerSocket(5678);
                    socket = serverSocket.accept();
                    System.out.print("linked!");
                }catch (Exception ee) {
                System.out.print(ee.getMessage());
            }
    //        }
        }
    }Clientimport java.awt.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import javax.swing.*;
    import javax.swing.event.AncestorListener;
    import java.io.*;
    import java.net.*;
    import java.io.DataInputStream;public class Client {
        private JTextArea recevieArea;
        private JTextArea sentArea;
        private JButton submitbutton;
        private static Socket socket;
        private PrintWriter pw;
        static DataInputStream is;
        DataOutputStream dos;
        DataInputStream  dis;
        private String s="";
        public Client(){
                }
        class frame extends JFrame{
            public frame(){
                setResizable(false);
                setVisible(true);
                this.setBounds(300,200,350,300);
                this.setTitle("Client");
                panel p = new panel();
                Container c = getContentPane();
                setDefaultCloseOperation(EXIT_ON_CLOSE);
                c.add(p);
                show();
                repaint();
                
            }
        }    class lis implements ActionListener {        public void actionPerformed(ActionEvent e) {
                if(e.getSource()==submitbutton){
                    try{
                    dos = new DataOutputStream(socket.getOutputStream());
                    dos.writeUTF("第一条记录发送成功");
                    dis = new DataInputStream(socket.getInputStream());
                    s = sentArea.getText();
                    recevieArea.append(dis.readUTF()+"\n");
      
                  sentArea.setText("");
                    //socket.getOutputStream();
                    }catch(Exception ee){
                        System.out.print(ee.getMessage());
                    }
                }
            }
        }
        
        class panel extends JPanel{
            public panel(){
                this.setBorder(null);
                
                submitbutton = new JButton("sent");
                submitbutton.setBounds(236, 200, 66, 35);
                add(submitbutton);
                submitbutton.addActionListener(new lis());
                setLayout(null);            final JScrollPane scrollPane = new JScrollPane();
                scrollPane.setBounds(10, 10, 220, 99);
                add(scrollPane);
                
                recevieArea = new JTextArea(5,20);
                scrollPane.setViewportView(recevieArea);
                recevieArea.setLineWrap(true);
                
                final JScrollPane scrollPane_1 = new JScrollPane();
                scrollPane_1.setBounds(10, 134, 220, 101);
                add(scrollPane_1);
                
                sentArea = new JTextArea(5,20);
                scrollPane_1.setViewportView(sentArea);
                sentArea.setLineWrap(true);
            }
        }    public static void main(String args []){
            new Client().new frame();
            try{
            socket = new Socket("127.0.0.1",5678);
            System.out.print("linked!");
            is = new DataInputStream(socket.getInputStream());
            
            }catch(Exception e){
                
            }
        }
    }