JavaのTCPソケットでマルチチャットを実現


くだらないことは言わないで、直接やります.
サービス・エンドを作成します.
package interWebWriterEven2;

import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;

/**
 *    
 * @author 
 *
 */
public class ServiceT {
	static ArrayList list = new ArrayList();
	public static void main(String[] args) {
		ServerSocket server;
		try {
			server = new ServerSocket(9999);
			while(true){
				Socket socket = server.accept();
				System.out.println(socket.getInetAddress().getHostName()+"    。IP:"+socket.getInetAddress().getHostAddress());
				list.add(socket);
				ServiceThreadT t =new ServiceThreadT(socket);
				t.start();
			}
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
}

次に、サービス側のスレッドが続きます.
package interWebWriterEven2;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;

/**
 *      
 * @author 
 *
 */
public class ServiceThreadT extends Thread{
	private Socket socket;

	public Socket getSocket() {
		return socket;
	}

	public void setSocket(Socket socket) {
		this.socket = socket;
	}

	public ServiceThreadT(Socket socket) {
		super();
		this.socket = socket;
	}

	@Override
	public void run() {
		try {
			@SuppressWarnings("resource")
			BufferedWriter wFile = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("D://messagesT.txt",true)));
			BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
			String strOut = "";
			String strIn = "";
			while(true){
				strIn = socket.getInetAddress().getHostName()+":"+br.readLine();
				strOut = strIn;
				wFile.write(strIn);
				wFile.newLine();
				wFile.flush();
				for (Socket soc : ServiceT.list) {
					if(soc != socket){
						BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(soc.getOutputStream()));
						bw.write(strOut);
						System.out.println(strOut);
						bw.newLine();
						bw.flush();
					}
				}
			}
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	
}

 
 
次に、クライアント(対応側):
 
package interWebWriterEven2;

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

/**
 *    
 * @author
 *
 */
public class ClientT {
	public static void main(String[] args) {
		try {
			Socket socket = new Socket("127.0.0.1",9999);
			ClientThreadT t  = new ClientThreadT(socket);
			t.start();
			BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
			String strIn = "";
			while(true){
				strIn = br.readLine();
				System.out.println(strIn);
			}
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
}

最後にクライアントのスレッド:
package interWebWriterEven2;

import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.util.Scanner;

/**
 *       
 * @author 
 *
 */
public class ClientThreadT extends Thread{
	private Socket socket;

	public Socket getSocket() {
		return socket;
	}

	public void setSocket(Socket socket) {
		this.socket = socket;
	}

	public ClientThreadT(Socket socket) {
		super();
		this.socket = socket;
	}

	@Override
	public void run() {
		@SuppressWarnings("resource")
		Scanner sc = new Scanner(System.in);
		try {
			BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
			while(true){
				System.out.println();
				bw.write(sc.nextLine().trim());
				bw.newLine();
				bw.flush();
			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

 
まずサービス側を実行してください.そうしないと、ポインタの異常が報告されます.
何か問題があったら、皆さんの下で批判指導を歓迎します.教えてくれてありがとう.