简单的C/S图形界面聊天程序

简单的C/S图形界面聊天程序_第1张图片
服务器端代码

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
import java.util.*;
import java.net.*;
//只能建立一个服务端和一个客户端通信,多出的不能通信,为什么?
public class TextChat2 {
	//必须在函数体后面加throws Exception抛出异常,而不是用try捕抓,用try会使得JFrame无法运行
	 public static void main(String[] args) throws Exception {
   	  
   	
   		final ServerSocket  ss=new ServerSocket(8888);
   		final Socket s=ss.accept();
   	
   	  
   	  
       
   	 JFrame f=new JFrame("Server");
   	 f.setSize(400,500);
  	 f.setLocation(200,200);
  	 f.setLayout(null);
  	 JTextArea jta=new JTextArea();
  	 jta.setBounds(100, 10, 300, 400);
     JTextField tf=new JTextField("");
     tf.setBounds(0, 200, 100, 30);
     JButton send=new JButton("send");
     send.setBounds(10,230,80,30);	   		   	 
     f.add(tf);
     f.add(send);
  	 f.add(jta);
  	//利用new Thread(){主体代码}.start;可以在函数体内方便地启用线程,无需另外创建Thread类
   	
          new Thread() { 
        	  
       	   public void run() {
       		   try {
       		 InputStream is=s.getInputStream();
	    	  DataInputStream dis=new DataInputStream(is);
	    	//不在输入端加while(true)就无法向另一端传输信息
       	      while(true) {String msg=dis.readUTF();
       	      //利用append(str+"\r\n"),实现消息换行
       		  jta.append(msg+"\r\n");}
       	      }
       		  catch(Exception e) {
       			   e.printStackTrace();
       		  }
       	   }
       	   
          }.start();
          send.addActionListener(new ActionListener() {
       	   public void actionPerformed(ActionEvent e) {
       		  String str=tf.getText(); 
       	   jta.append(str+"\r\n");
       		 try{
       		  OutputStream os=s.getOutputStream();
       	   	  DataOutputStream dos=new DataOutputStream(os);
       			 
       		 dos.writeUTF(str);
       		
       		 tf.setText(null);
       		 }
       		 catch(IOException ex) {
       			 ex.printStackTrace();
       		 }
       	   }
          });
   	  f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   	  f.setVisible(true);       	  
     }
}

客户端代码

package socket;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
import java.util.*;
import java.net.*;
public class TextChat {
      //必须在函数体后面加throws Exception抛出异常,而不是用try捕抓,用try会使得JFrame无法运行
	 public static void main(String[] args) throws Exception {	   	 
	   		
	      final Socket s=new Socket("127.0.0.1", 8888);	   		   	   	  	       
	   	  JFrame f=new JFrame("Client");
	   	  f.setSize(400,500);
	   	  f.setLocation(200,200);
	   	  f.setLayout(null);
	   	  JTextArea jta=new JTextArea();
	   	  jta.setBounds(100, 10, 300, 400);
	      JTextField tf=new JTextField("");
	      tf.setBounds(0, 200, 100, 30);
	      JButton send=new JButton("send");
	      send.setBounds(10,230,80,30);	   		   	 
	      f.add(tf);
	      f.add(send);
	   	  f.add(jta);
	   	//利用new Thread(){主体代码}.start;可以在函数体内方便地启用线程,无需另外创建Thread类
	          new Thread() { 
	        	  //不在输入端加while(true)就无法向另一端传输信息
	       	   public void run() {
	       		   try {
	       		 InputStream is=s.getInputStream();
		    	  DataInputStream dis=new DataInputStream(is);
		    	 while(true) { 
	       	      String msg=dis.readUTF(); 
	       		  jta.append(msg+"\r\n");
	       		  }
	       		   }
	       		   catch(Exception e) {
	       			   e.printStackTrace();
	       		   }
	       	   }
	       	   
	          }.start();
	          send.addActionListener(new ActionListener() {
	       	   public void actionPerformed(ActionEvent e) {
	       		   String str=tf.getText();
	       	       jta.append(str+"\r\n");
	       	    try{
	       		  OutputStream os=s.getOutputStream();
	       	   	  DataOutputStream dos=new DataOutputStream(os);	       		
	       		  dos.writeUTF(str);
	       		  tf.setText(null);
	       		   }
	       		 catch(IOException ex) {
	       			 ex.printStackTrace();
	       		 }
	       	   }
	          });
	   	  f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	   	  f.setVisible(true);       	  
	     }
}

你可能感兴趣的:(简单的C/S图形界面聊天程序)