使用Java Socket实现简单的聊天功能

 

首先是服务器端代码:

 

package 聊天程序服务器;
import java.io.*;
import java.net.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class MyServer {
	private BufferedReader reader;
	private PrintWriter writer;
	private ServerSocket server;
	private Socket socket;
	private JFrame frame;
	private Container container;
	private JTextArea ta=new JTextArea();
	private JTextField tf=new JTextField();
	private JScrollPane sp=new JScrollPane();
	public void GetServer()
	{
		try{
			frame=new JFrame("服务器");
			container=frame.getContentPane();
			container.setLayout(new BorderLayout());
			sp.setViewportView(ta);
			container.add(sp, BorderLayout.CENTER);
			container.add(tf,BorderLayout.SOUTH);
			frame.setSize(400, 400);
			frame.setVisible(true);
			frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	        server=new ServerSocket(80);      //此处为端口号
			System.out.println("服务器套接字已连接");
			tf.addActionListener(new ActionListener(){
				public void actionPerformed(ActionEvent e)
				{
					writer.println(tf.getText());
					ta.append("服务器:"+tf.getText()+'\n');
					tf.setText("");
				}
			}
					);
			while(true)
			{
				System.out.println("等待客户端连接...");
				socket=server.accept();
				writer=new PrintWriter(socket.getOutputStream(),true);
				reader=new BufferedReader(new InputStreamReader(socket.getInputStream()));
			    while(reader!=null)
				{
			    	ta.append("客户端:"+reader.readLine()+'\n');
				}
				}
		}catch(Exception e)
		{
			e.printStackTrace();
		}
	}
	  public static void main(String[] args)
	  {
		  MyServer myserver=new MyServer();
		  myserver.GetServer();
	  }
}


客户端代码:

 

 

 

package 聊天程序客户端;
import java.io.*;
import java.awt.*;
import java.net.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class MyClient extends JFrame {
      private PrintWriter writer;
      private BufferedReader reader;
      private Socket socket;
      private JTextArea ta=new JTextArea();
      private JTextField tf=new JTextField();
      private JScrollPane sp=new JScrollPane();
      private Container container;
      public MyClient(String title)
      {
    	  super(title);
    	  container=this.getContentPane();
    	  container.setLayout(new BorderLayout());
    	  sp.setViewportView(ta);
    	  container.add(sp, BorderLayout.CENTER);
    	  container.add(tf, BorderLayout.SOUTH);
    	  tf.addActionListener(new ActionListener(){
    		  public void actionPerformed(ActionEvent e)
    		  {
    			  writer.println(tf.getText());
    			  ta.append("客户端:"+tf.getText()+'\n');
    			  tf.setText("");
    		  }
    	  }
    			  );
    	  
          this.setSize(400,400);
          this.setVisible(true);
          this.setDefaultCloseOperation(EXIT_ON_CLOSE);
          
      }
       public void connect()
       {
    	   try{
    		   socket=new Socket("×××",80);        //×××为服务器的IP地址
    		   reader=new BufferedReader(new InputStreamReader(socket.getInputStream()));
    		   writer=new PrintWriter(socket.getOutputStream(),true);
    		   ta.append("连接成功\n");
    	   }catch(Exception e)
    	   {
    		   e.printStackTrace();
    	   }  
       }
       public static void main(String[] args)
        {
        	MyClient myclient=new MyClient("客户端");
        	myclient.connect();
        	while(true)
        	{
        		try{myclient.ta.append("服务器:"+myclient.reader.readLine()+'\n');
        		}catch(Exception e)
        		{
        			e.printStackTrace();
        		}
        		}
        }
}


如果要实现局域网内互联,服务器IP地址可以就写内网IP地址,即192.168之类的。如果要实现广域网内连接,IP地址要填写外网IP地址,并且做内网映射,否则会连接失败。

 

appstore搜索:颜色提取, 设计师的福音,提取照片中每个像素的颜色

 

 

 

你可能感兴趣的:(使用Java Socket实现简单的聊天功能)