Java 在线聊天简单示例(Socket)

概要:

Java 在线聊天简单示例(Socket)

| |目录

服务器端代码

package net.xsoftlab.baike;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;
//服务器端代码
public class SocketServer {
	ArrayList clientList = new ArrayList();
	public static void main(String[] args) {
		// 在main函数中,启动服务器的socket
		new SocketServer().OpenServer();
	}
	public void OpenServer() {
		try {
			ServerSocket server = new ServerSocket(10001);
			Socket socket;
			while ((socket = server.accept()) != null) {
				clientList.add(socket);
				new readClient(socket).start();
				new writeClient(socket).start();
			}
		} catch (Exception e) {
			System.out.println(e.toString());
		}
	}
	public class readClient extends Thread {
		private Socket socket;
		public readClient(Socket client) {
			socket = client;
		}
		public void run() {
			String msg;
			try {
				String clientName = socket.getInetAddress().toString();
				DataOutputStream output = new DataOutputStream(
						socket.getOutputStream());
				DataInputStream input = new DataInputStream(
						socket.getInputStream());
				while ((msg = input.readUTF()) != null) {
					System.out.println("收到消息:【" + clientName + "】 " + msg);
				}
			} catch (Exception e) {
				System.out.println(e.toString());
			}
		}
	}
	public class writeClient extends Thread {
		private Socket socket;
		public writeClient(Socket client) {
			socket = client;
		}
		public void run() {
			try {
				BufferedReader stdIn = new BufferedReader(
						new InputStreamReader(System.in));
				String userInput;
				String clientName = socket.getInetAddress().toString();
				DataOutputStream output = new DataOutputStream(
						socket.getOutputStream());
				DataInputStream input = new DataInputStream(
						socket.getInputStream());
				while (true) {
					if (stdIn.ready()) {
						userInput = stdIn.readLine();
						if (userInput != "exit") {
							output.writeUTF(userInput);
							System.out.println("已发送消息给【" + clientName + "】"
									+ userInput);
						}
					}
				}
			} catch (Exception e) {
				System.out.println(e.toString());
			}
		}
	}
}

客户端代码

package net.xsoftlab.baike;
import java.net.Socket;
import java.awt.Frame;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;
//客户端代码
public class SocketClient extends Frame {
	
	private DataOutputStream output;
	private DataInputStream input;
	private String clientName;
	public static void main(String[] args) {
		// 在main函数中,启动服务器的socket
		new SocketClient().ConnectServer();
	}
	public void ConnectServer() {
		try {
			Socket socket = new Socket("localhost", 10001);
			clientName = socket.getInetAddress().toString();
			input = new DataInputStream(socket.getInputStream());
			output = new DataOutputStream(socket.getOutputStream());
			new readServer().start();
			new writeServer().start();
		} catch (Exception e) {
			System.out.println(e.toString());
		}
	}
	public class readServer extends Thread {
		private Socket client;
		public void run() {
			String msg;
			try {
				while (true) {
					msg = input.readUTF();
					if (msg != null)
						System.out.println("收到消息:【" + clientName + "】 " + msg);
				}
			} catch (Exception e) {
				System.out.println(e.toString());
			}
		}
	}
	public class writeServer extends Thread {
		private Socket client;
		public void run() {
			try {
				BufferedReader stdIn = new BufferedReader(
						new InputStreamReader(System.in));
				String userInput;
				while (true) {
					if (stdIn.ready()) {
						userInput = stdIn.readLine();
						if (userInput != "exit") {
							output.writeUTF(userInput);
							System.out.println("已发送消息给【" + clientName + "】"
									+ userInput);
						}
					}
				}
			} catch (Exception e) {
				System.out.println(e.toString());
			}
		}
	}
}


评论关闭
评论 还能输入200
评论关闭
评论 还能输入200
  • 全部评论(0)
资料加载中...
已关注 , 取消