用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - java代码库

通信--局域网单对单聊天

2015-12-20 作者:永夜极光举报

[java]代码库

要先打开服务器,然后才能连接客户端通信
1.服务器
package s122803可视化主机与客户端通信;
//凡是网络通信相关,都要这2个包
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*; 
import java.net.*;           

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public class Server extends JFrame implements ActionListener{
	
	
	JTextArea jta=null;
	JButton jb=null;
	JTextField jtf=null;
	JPanel jp=null;
	JScrollPane jsp=null;
	PrintWriter pw=null;
	
	public Server()
	{
		
		//设置窗体属性************************************************************
				jta=new JTextArea();
				jb=new JButton("发送");
				jb.addActionListener(this);  //
				jtf=new JTextField(15);
				jp=new JPanel();   jp.add(jtf); jp.add(jb);
				jsp=new JScrollPane(jta); 
				
				 this.setTitle("服务器");//设置窗体的标题	
			     this.setSize(400,300);//设置窗体的大小
			     this.setDefaultCloseOperation(3);//设置关闭的方式
			     this.setLocationRelativeTo(null);//设置窗体出现在屏幕中间
			     this.setResizable(false);//设置窗体不可改变大小
			     this.setLayout(new BorderLayout());//设置窗体为空布局
			     this.add(jsp,BorderLayout.CENTER);
			     this.add(jp,BorderLayout.SOUTH);
			     this.setVisible(true);
	   //设置窗体属性************************************************************
			     
	try{
		ServerSocket ss=new ServerSocket(9999);        //设置服务器端口是9999
		Socket s=ss.accept();                          //监听是否有客户端登陆,只有为true才会执行下面的代码
                                                       //而且监听到的端口赋给s,s就表示连接的客户端端口                  
		
		BufferedReader br=new BufferedReader(new InputStreamReader(s.getInputStream())); 
		/*s是客户端端口,s.getInputStream这个方法是获取客户端的输入流,从而获取客户端发送的数据
		上面这一句可以写成2句话 InputStreamReader aa=new InputStreamReader(s.getInputStream()); 
		                     BufferedReader br=new BufferedReader(aa);       将字节流放入缓冲池       */	
		 pw=new PrintWriter(s.getOutputStream(),true);
		 jta.setText("客户端已接入"+"\r\n");
		 String aa="已成功连接服务器";
		 pw.println(aa);
		
	    while(true)
	    {
	    	String xinxi=br.readLine();
     	   jta.append("客户端:"+xinxi+"\r\n");	    	
	    }		
	  }	catch(Exception e){}
	
	
	}
	
	public static void  main(String[] args)
	{
		new Server(); 

	}

	public void actionPerformed(ActionEvent e) {
		if(e.getActionCommand().equals("发送"))
		{ 
			String xinxi=jtf.getText();
			jta.append("服务器:"+xinxi+"\r\n");
			pw.println(xinxi);
			jtf.setText("");
		}
		
	}
	
}
	
2.客户端
package s122803可视化主机与客户端通信;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.awt.BorderLayout;
import java.awt.event.*;

import javax.swing.*;

public class Client extends JFrame implements ActionListener
{
	 //声明各组件************************
	JTextArea jta=null;      
	JButton jb=null;
	JTextField jtf=null;
	JPanel jp=null;
	JScrollPane jsp=null;
	PrintWriter pw=null;
	 //声明各组件************************
	
	public static void  main(String[] args)
	{new Client(); }
		
	public Client() 
	{   
		
		//设置窗体属性************************************************************
		jta=new JTextArea();                        //创建文本域对象
		jb=new JButton("发送");                     	//创建按钮对象
		jb.addActionListener(this);                 //给按钮添加事件源对象
		jtf=new JTextField(15);                     //创建文本框对象
		jp=new JPanel();   jp.add(jtf); jp.add(jb); //创建界面对象jp,在界面中添加文本框和按钮
		jsp=new JScrollPane(jta);                   //在滚动条中添加文本域
		
		 this.setTitle("客户端");					//设置窗体的标题	
	     this.setSize(400,300);						//设置窗体的大小
	     this.setDefaultCloseOperation(3);			//设置关闭的方式
	     this.setLocationRelativeTo(null);			//设置窗体出现在屏幕中间
	     this.setResizable(false);					//设置窗体不可改变大小
	     this.setLayout(new BorderLayout());		//设置窗体为空布局
	     this.add(jsp,BorderLayout.CENTER);         //将面板jsp添加到窗体的中间区域
	     this.add(jp,BorderLayout.SOUTH);           //将面板jp添加到窗体的下方区域
	     this.setVisible(true);                     //设置窗体可见
	   //设置窗体属性************************************************************
			
		try{
			Socket s=new Socket("127.0.0.1",9999);          //服务器地址为127.0.0.1,端口号是9999
			pw=new PrintWriter(s.getOutputStream(),true);   //pw用来存要发送的信息
			BufferedReader br=new BufferedReader(new InputStreamReader(s.getInputStream()));
			/*s是客户端端口,s.getInputStream这个方法是获取客户端的输入流,从而获取客户端发送的数据
			上面这一句可以写成2句话 InputStreamReader aa=new InputStreamReader(s.getInputStream()); 
		               			 BufferedReader br=new BufferedReader(aa);       将字节流放入缓冲池       */
	               while(true)
	               {
	            	   String xinxi=br.readLine();                   //读取客户端发送的信息,读取一行
	            	   jta.append("服务器:"+xinxi+"\r\n");           //文本域显示读取到的信息
	               }   
	          }  catch(Exception e){}
	
		
	 }

	public void actionPerformed(ActionEvent e) 
	{
		if(e.getActionCommand().equals("发送"))                       //如果按钮被点击
		{ String xinxi=jtf.getText();                                 //得到文本框输入的内容
		 jta.append("客户端:"+xinxi+"\r\n");                          //将输入的内容显示在文本域中
		 pw.println(xinxi);                                           //将我要发送的信息发送出去
		 jtf.setText("");	                                          //将文本框清空
		}
	}
	
	
}
	
	
	
	

[源代码打包下载]




分享到:
更多

网友评论    (发表评论)

共3 条评论 1/1页

发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。