⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 chatclient_mashibing.java

📁 socket编程客户端源代码
💻 JAVA
字号:
package local;

import java.awt.BorderLayout;
import java.awt.Frame;
import java.awt.TextArea;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;
import java.net.SocketException;
import java.net.UnknownHostException;

public class ChatClient_mashibing extends Frame {

	TextField tfTxt = new TextField();

	TextArea taContent = new TextArea();

	Socket client = null;

	PrintStream dos = null;

	BufferedReader br = null;

	String str = null;

	public static void main(String[] args) {
		new ChatClient_mashibing().launchFrame();
	}

	public void launchFrame() {
		setLocation(300, 300);
		add(tfTxt, BorderLayout.SOUTH);
		add(taContent, BorderLayout.NORTH);
		addWindowListener(new Wclosing());
		tfTxt.addActionListener(new TFListener());
		setSize(400, 300);
		setVisible(true);

		connect(); // 窗口启动后,同时连接上服务器端!!
		new RecvMsg().start();
	}

	/**
	 * 为连接服务器端建立一个方法
	 * 
	 */
	public void connect() {
		try {
			client = new Socket("localhost", 6214);// 必须注意这里的client前面不能定义Socket类型,不然client会变成局部变量,在下面的connect()方法调用时会变成空指针。
			dos = new PrintStream(client.getOutputStream());// 当成功链接上服务端后,对dos进行初始化。
			br = new BufferedReader(new InputStreamReader(client
					.getInputStream()));// 当成功链接上服务端后,对br进行初始化。

			System.out.println("Connected");// 测试是否成功连接上服务端
		} catch (UnknownHostException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();

		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

	/**
	 * 为断开服务器建立一个方法,该方法用于清理资源,当点击关闭窗口是调用该方法。
	 * 
	 */
	public void disConnect() {
		try {
			dos.close();
			br.close();
			client.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	class Wclosing extends WindowAdapter {
		@Override
		public void windowClosing(WindowEvent e) {
			disConnect();// 当退出窗口时调用该方法
			System.exit(0);
		}
	}

	private class TFListener implements ActionListener {
		public void actionPerformed(ActionEvent e) {
			String tmp = tfTxt.getText().trim();// trim()去掉空格
			// taContent.setText(tmp);
			tfTxt.setText("");// 发送完信息后清空

			// 进行流操作,将信息发送到服务端
			try {
				dos.println(tmp);
				// dos.flush();

			} catch (Exception e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}
		}
	}

	private class RecvMsg extends Thread {
		public void run() {
			try {
				while ((str = br.readLine()) != null) {
					// System.out.println(str);
					taContent.setText(taContent.getText() + str + "\n");
				}
			}catch(SocketException se){
				System.out.println("Quit,Bye!!");
			} 
			catch (IOException e) {
				// TODO Auto-generated catch block
				System.out.println("不能接收广播信息!!!");
				e.printStackTrace();
			}
		}
	}

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -