现在的位置: 首页 > 综合 > 正文

java io,socket

2018年05月28日 ⁄ 综合 ⁄ 共 2013字 ⁄ 字号 评论关闭
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.net.*;
import java.io.*;



public class Login extends JFrame implements ActionListener{
	 JTextField txtUser = new JTextField();
  	 JPasswordField txtPass = new JPasswordField();
	 JButton loginBtn = new JButton("登陆");
	 JButton registerBtn = new JButton("注册");
	 JButton exitBtn = new JButton("退出");
	
	Login(){
		this.setSize(250,125);
		JPanel upPanel = new JPanel();
		upPanel.setLayout(new GridLayout(2,2));
		JLabel labUser = new JLabel("用户名");
		JLabel labPass = new JLabel("密码");
		upPanel.add(labUser);
		upPanel.add(txtUser);
		upPanel.add(labPass);
		upPanel.add(txtPass);

		JPanel downPanel = new JPanel();
		downPanel.setLayout(new FlowLayout());
		downPanel.add(loginBtn);
		downPanel.add(registerBtn);
		downPanel.add(exitBtn);

		this.setLayout(new BorderLayout());
		this.add(upPanel,BorderLayout.CENTER);
		this.add(downPanel,BorderLayout.SOUTH);

		loginBtn.addActionListener(this);
		registerBtn.addActionListener(this);
		exitBtn.addActionListener(this);
		
	}


	public static void main(String args[]){
		JFrame   m = new Login();
		m.setVisible(true);

	}

	public void actionPerformed(ActionEvent arg0){
		if(arg0.getActionCommand().equals("登陆")){
			String  u = txtUser.getText();
			String  p = txtPass.getText();
			String up = u+"%"+p;
			try{
				Socket s = new Socket("localhost",8000);
				OutputStream os = s.getOutputStream();
				OutputStreamWriter osr = new OutputStreamWriter(os);
				PrintWriter pw = new PrintWriter(osr,true);
				pw.println(up);
				

				
				InputStream is = s.getInputStream();
				InputStreamReader isr = new InputStreamReader(is);
				BufferedReader br = new BufferedReader(isr);
				String flag = br.readLine();
				if(flag.equals("true")){
					JFrame m = new QQMain();
					m.setVisible(true);
				}	
				else{
					JOptionPane.showMessageDialog(this,"登陆失败请重新登陆");
				}
			
				
			}
			catch(Exception e){
 				e.printStackTrace();
			}
		}
		if(arg0.getActionCommand().equals("注册")){
			System.out.println("注册");
		}
		if(arg0.getActionCommand().equals("退出")){
			System.out.println("退出");
		}

	}


}
上面的PrintWriter pw = new PrintWiter(osr,true);   会直接刷新流 ;
   但是 如果写成  PrintWritr pw= new PrintWriter(osr);  pw.println(flag) ; pw.close(); 则会报错  说socket被关闭 .
这个有点不懂 查了PrintWriter 的close方法  
		
     public void <strong>close</strong>()
<dl><dd>关闭该流并释放与之关联的所有系统资源。关闭以前关闭的流无效。</dd></dl>

为什么socket也被关闭了??

【上篇】
【下篇】

抱歉!评论已关闭.