聊天室初版(未完成)

相关客户端,服务端,及接口:

客户端

package chat01

import java.io.DataInputStream;
import java.io.IOException;
import java.net.Socket;
/**
 *创建服务器
 *写出数据:输入流
 *读取数据:输出流 
 *
 *输入流与输出流在同一个线程内应该彼此独立处理
 * @author 
 *
 */
public class Client {

	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub

		Socket client = new Socket("localhost",8888);
		//控制台输入流
		new Thread(new Send(client)).start();//一条路径
		
		DataInputStream dis = new DataInputStream(client.getInputStream());
		while(true) {
		//输入流
		String msg = dis.readUTF();
		System.out.println(msg);
		}
	}

}

服务端

package chat01;


import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

/**
 *写出数据:输入流
 *读取数据:输出流
 * @author 
 *
 */
public class Server {

	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub

		ServerSocket server = new ServerSocket(8888);
		Socket client = server.accept();
	
		//写出数据
		//输入流
		DataInputStream dis = new DataInputStream(client.getInputStream());
		DataOutputStream dos = new DataOutputStream(client.getOutputStream());
		while(true) {
		String msg = dis.readUTF();
		//输出流
		dos.writeUTF("服务器已收到" + msg);
		dos.flush();
		}
	}

}

/**
 *一个客户端一条道路
 *1.输入流
 *2.输出流
 *3.接收数据 
 *4.发送数据
 * @author 
 *
 */

class MYChannel implements Runnable{
	
	private DataInputStream dis;
	private DataOutputStream dos;
	private boolean isRunning = true;
	public MYChannel(Socket client) {
		
		try {
			
			dis = new DataInputStream(client.getInputStream());
			dos = new DataOutputStream(client.getOutputStream());
		}catch(IOException e) {
			closeUtil.closeAll(dis,dos);
			isRunning = false;
		}
		private String receive() {
			
			String msg = "";
			try {
				
				msg = dis.readUTF();
			}catch(IOException e) {
				
				closeUtil.closeAll(dis,dos);
				isRunning = false;
			}
			
			return msg;
		}
	}

	@Override
	public void run() {
		// TODO Auto-generated method stub
		
	}
}

接收数据端

package chat01;

import java.io.DataInputStream;
import java.io.IOException;
import java.net.Socket;

/**
 * 接收数据 线程
 * @author 
 *
 */
public class Receive implements Runnable{

	private DataInputStream  dis;
	private boolean isRunning = true;
	public Receive() {
		
	}
	
	public Receive(Socket client) {
		
		try {
			
			dis = new DataInputStream(client.getInputStream());
		}catch(IOException e) {
			
			isRunning = false;
			closeUtil.closeAll(dis);
		}
	}
	/**
	 * 接收数据
	 */
	public String receive() {
		
		String msg = "my";
		try {
			
			dis.readUTF();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			
			isRunning = false;
			closeUtil.closeAll(dis);
		}
		return msg;
	}
	@Override
	public void run() {
		// TODO Auto-generated method stub
		
		while(isRunning) {
			
			System.out.println(receive());
		}
	}

}

发送数据端

package chat01;

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;

/**
 * 发送数据 线程
 * @author
 *
 */
public class Send implements Runnable{
	//控制台输入流
	private BufferedReader console;
	//管道输出流
	private DataOutputStream dos;
	//控制线程
	private boolean isRunning = true;
	
	public Send() {
		
		console = new BufferedReader(new InputStreamReader(System.in));

	}
	
	public Send(Socket client){
		
		this();
		try {
			
			dos =  new DataOutputStream(client.getOutputStream());
		} catch (IOException e) {
			// TODO Auto-generated catch block
			
			isRunning = false;
			closeUtil.closeAll(dos,console);
		}
	}
	//从控制台接受数据
	private String getMsgFromConsole() {
		
		try {
			
			return console.readLine();
		}catch(IOException e) {
		}
		return "";	
	}
	
	public void send() {
		
		String msg = getMsgFromConsole();
		try {
		if(null != msg && !msg.equals("")) {
				dos.writeUTF(msg);
				dos.flush(); //强制刷新
			}
		}catch (IOException e) {
				// TODO Auto-generated catch block
				
				isRunning = false;
				closeUtil.closeAll(dos,console);
			}
		}

	
	@Override
	public void run() {
		// TODO Auto-generated method stub
		
		while(isRunning) {
			
			send();
		}
	}
}

关闭流的方法

package chat01;

import java.io.Closeable;
import java.io.IOException;

/**
 * 关闭流的方法
 * @author 
 *
 */

public class closeUtil {

	public static void closeAll(Closeable...io) {
		
		for(Closeable temp : io) {
			if(null != temp) {
				try {
					temp.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
				}
			}
		}
	}
}

猜你喜欢

转载自blog.csdn.net/qq_42014895/article/details/82747119
今日推荐