http://dl.vmall.com/c0z71mj7fd   这是我的代码麻烦看下 java   socket

解决方案 »

  1.   

    界面
    package chat;
    //我的聊天工具
    import java.awt.event.*;
    import java.io.*;
    import java.net.*;import javax.swing.*;
    import javax.swing.event.*;public class ChatAWT extends javax.swing.JFrame {
    private JLabel jLabel1;
    private JLabel jLabel2;
    private JLabel jLabel3;
    private JButton jButton1;
    private JButton jButton2;
    private JButton jButton3;
    public JTextArea jTextArea2;
    public JTextArea jTextArea1;
    private JScrollPane jScrollPane1;
    private JScrollPane jScrollPane2;
    private Socket sk; //Socket对象
    private String Text=""; //接收聊天记录

    public ChatAWT(Socket sk) throws Exception {
    super();
    initGUI();
    this.sk=sk;

    }

    private void initGUI() {
    try {
    setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
    getContentPane().setLayout(null);
    getContentPane().setBackground(new java.awt.Color(83,169,255));
    {
    jLabel1 = new JLabel();
    getContentPane().add(jLabel1);
    jLabel1.setText("我的聊天室");
    jLabel1.setBounds(118, 12, 106, 26);
    jLabel1.setFont(new java.awt.Font("新宋体",1,20));
    }
    {
    jScrollPane1 = new JScrollPane();
    getContentPane().add(jScrollPane1, "Center");
    jScrollPane1.setBounds(45, 44, 262, 149);
    {
    jTextArea1 = new JTextArea();
    jScrollPane1.setViewportView(jTextArea1);
    jTextArea1.setBackground(new java.awt.Color(191,251,214));
    jTextArea1.setEditable(false);
    }
    }
    {
    jScrollPane2 = new JScrollPane();
    getContentPane().add(jScrollPane2, "Center");
    jScrollPane2.setBounds(45, 215, 262, 109);
    {
    jTextArea2 = new JTextArea();
    jScrollPane2.setViewportView(jTextArea2);
    }
    }
    {
    jButton1 = new JButton();
    getContentPane().add(jButton1);
    jButton1.setText("发送");
    jButton1.setBounds(245, 330, 62, 24);
    jButton1.addActionListener(new Chat_Send(this));
    }
    {
    jButton2 = new JButton();
    getContentPane().add(jButton2);
    jButton2.setText("清屏");
    jButton2.setBounds(351, 169, 92, 24);
    jButton2.addActionListener(new Chat_eliminate(this));
    }
    {
    jButton3 = new JButton();
    getContentPane().add(jButton3);
    jButton3.setText("聊天记录");
    jButton3.setBounds(351, 206, 92, 24);
    }
    {
    jLabel2 = new JLabel();
    getContentPane().add(jLabel2);
    jLabel2.setText("客户B");
    jLabel2.setBounds(339, 62, 112, 73);
    jLabel2.setFont(new java.awt.Font("华文行楷",1,36));
    }
    {
    jLabel3 = new JLabel();
    getContentPane().add(jLabel3);
    jLabel3.setText("客户A");
    jLabel3.setFont(new java.awt.Font("华文行楷",1,36));
    jLabel3.setBounds(339, 257, 112, 73);
    }
    pack();
    this.setSize(500, 400);
    this.setLocationRelativeTo(null);
    this.setVisible(true);
    } catch (Exception e) {
    e.printStackTrace();
    }

    }

    //发送键——执行的操作
    public void send() throws Exception{
    //思路:把从输入框获得内容,放到聊天记录框,并把它写入到输出流中
    String str=jTextArea2.getText()+"\n";
    //jTextArea1.append("客户端:"+str); //发送完的内容放到接收文本框
    OutputStream out=sk.getOutputStream();
    PrintStream print=new PrintStream(out,true);
    print.print(str);
    jTextArea2.setText(""); //发送完之后输入框置空
    }

    //清屏键——执行的操作
    public void eliminate (){
    jTextArea1.setText("");
    }

    //实现接收客户端发来的数据
    public void receive(){

    try {
    //读取客户端发来的数据
    InputStream in=sk.getInputStream();
    //把字节流读到缓冲字符流中(new InputStreamReader(in)把字节流转化成字符流)
    BufferedReader reader=new BufferedReader(new InputStreamReader(in));
    String str="";
    while((str=reader.readLine())!=null){
    //把读到的信息放到聊天记录框中
    jTextArea1.append("服务端:");
    System.out.println("服务端:");
    }
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    }//发送键——实现监听
    class Chat_Send implements ActionListener{
    private ChatAWT chat;
    public Chat_Send(ChatAWT chat) {
    super();
    this.chat = chat;
    }
    public void actionPerformed(ActionEvent e) {
    try {
    chat.send();
    } catch (Exception e1) {
    e1.printStackTrace();
    }
    }
    }//清屏键——实现监听
    class Chat_eliminate implements ActionListener{
    private ChatAWT chat;
    public Chat_eliminate(ChatAWT chat) {
    super();
    this.chat = chat;
    }
    public void actionPerformed(ActionEvent e) {
    chat.eliminate();
    }
    }客户端
    package chat;import java.io.*;
    import java.net.*;public class Chat {
    public static void main(String[] args) throws Exception {
    Socket sk = new Socket("127.0.0.1", 20139);
    ChatAWT chat = new ChatAWT(sk);
    ChatThread t = new ChatThread(chat, sk);
    t.start();
    }
    }客户端线程
    package chat;import java.io.*;
    import java.net.Socket;public class ChatThread extends Thread {
    private ChatAWT chat;
    private Socket sk;

    //构建有参构造(目的:和界面)
    public ChatThread(ChatAWT chat, Socket sk) {
    super();
    this.chat = chat;
    this.sk = sk;
    }

    public void run() {
    super.run();
    try {
    while(true){
    System.out.println("线程启动了");
    //读取客户端发来的数据
    InputStream in=sk.getInputStream();

    System.out.println(sk.getInetAddress());
    //把字节流读到缓冲字符流中(new InputStreamReader(in)把字节流转化成字符流)
    BufferedReader reader=new BufferedReader(new InputStreamReader(in));
    chat.jTextArea1.append("服务端:"+reader.readLine());
    System.out.println("服务端:");
    }

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

    }
    服务端
    package chat;import java.io.*;
    import java.net.*;
    import java.util.HashSet;
    import java.util.Scanner;
    import java.util.Set;
    //服务端
    public class Server {
    public static void main(String[] args) throws Exception {
    System.out.println("服务器已启动");
    //创建serversocket对象
    ServerSocket ss=new ServerSocket(20139);

    //进行监听,获得相应的客户端socket对象、
    Socket sk=ss.accept();

    //读取客户端发来输出流数据
    InputStream in=sk.getInputStream();
    OutputStream out=sk.getOutputStream();
    //把字节流读到缓冲字符流中(new InputStreamReader(in)把字节流转化成字符流)
    BufferedReader reader=new BufferedReader(new InputStreamReader(in));
    String msg="";
    while((msg=reader.readLine())!=null){
    System.out.println("客户端:"+msg);

    //把得到的信息又返回给客户端
    PrintStream print=new PrintStream(out,true); //会自动刷新和写如换行符'\n'
    print.print("我发出去了((()))");
    System.out.println("我发出去了");
    }
    }
    }服务端线程
    package chat;import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.OutputStream;
    import java.io.PrintStream;
    import java.net.Socket;
    import java.util.Scanner;public class ServerThread extends Thread {
    private Socket sk;

    //有参构造(目的:和主线程产生关系)
    public ServerThread(Socket sk) {
    super();
    this.sk = sk;
    }
    }