java网络编程(模拟群聊)

 代码:(个人所写仅供参考)

①客户端写入代码,此处将客户端中的Socket引入

import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintStream;
import java.util.Scanner;

public class writer_client extends Thread {
	Client_00 client;
	public  writer_client(Client_00 client) {
		this.client=client;
	}
	Scanner scan=new Scanner(System.in);
	@Override
	public void run() {
		while(true) {
		try {
			OutputStream os=client.s.getOutputStream();
			PrintStream ps=new PrintStream(os);
			System.out.println("请输入消息。。。");
			String str=scan.nextLine();
			ps.println(str);
			ps.flush();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		}
	}
}

②客户端读取服务器部分代码

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

public class reader_client	extends Thread {
	Client_00 client;
	public reader_client(Client_00 client) {
		this.client=client;
	}
	@Override
	public void run() {
		while(true) {
			InputStream is;
			try {
				is = client.s.getInputStream();
				InputStreamReader isr=new InputStreamReader(is);
				BufferedReader br=new BufferedReader(isr);
				String str=br.readLine();
				System.out.println("向您发送消息:"+str);
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
			
		}
	}
}

3.客户端运行:

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

public class Client_00 {
	public  static Socket s;
	public static void main(String[] args) {
		Client_00 c=new Client_00();
		
		try {
			//链接服务器
			System.out.println("客户端请求链接服务其。。。");
			s=new Socket("localhost", 8888);
			System.out.println("服务器已连接!");
			writer_client wc_0=new writer_client(c);
			reader_client rc_01=new reader_client(c);
			wc_0.start();
			rc_01.start();
		} catch (UnknownHostException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}

1.服务器部分:

<1

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;

public class ServerSocket_00 {
	public static List<Socket> list=new ArrayList<Socket>();
	public static Socket sk;
	public static void main(String[] args) {
		try {
			ServerSocket ss=new ServerSocket(8888);
			int i=1;
			while(true) {
				System.out.println("等待服务器联入。。。");
				sk =ss.accept();
				System.out.println("第"+i+"个客户端已经联入");
				list.add(sk);
				Sockets_00 skk=new Sockets_00(sk);
				skk.start();
				i++;
			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

}

<2socket线程部分

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.List;
//功能:对客户端发来的消息进行转发
public class Sockets_00 extends Thread{
	Socket sk;
	public Sockets_00(Socket sk) {
		this.sk=sk;
	}
	@Override
	public void run() {
		while(true) {
			try {
				InputStream is=sk.getInputStream();
				InputStreamReader isr=new InputStreamReader(is);
				BufferedReader br=new BufferedReader(isr);
				//进行消息的转发
				String str=br.readLine();
				for(Socket socket:ServerSocket_00.list) {
					OutputStream os=socket.getOutputStream();
					PrintWriter pw=new PrintWriter(os);
					if(sk.equals(socket))
						{continue;}
					pw.println(str);
					pw.flush();
				}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		}
	}
}

猜你喜欢

转载自blog.csdn.net/qq_36055407/article/details/81318689