JavaはTCPソケットを使って複数人のチャット機能を実現します。


本論文の例は、JavaがTCPソケットを使用して複数人のチャット機能を実現することを述べている。皆さんに参考にしてあげます。具体的には以下の通りです。
余計なことを言わないで、直接にやります。
まずサービスを作成します。

package interWebWriterEven2;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
/**
 *    
 * @author
 *
 */
public class ServiceT {
    static ArrayList<Socket> list = new ArrayList<Socket>();
    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();
        }
    }
}

まずサービスを実行します。さもなければ、空の針が異常です。
java関連の内容についてもっと興味がある読者は、当駅のテーマを調べてもいいです。「Java Socketプログラミング技術のまとめ」、「Javaファイルとディレクトリの操作テクニックのまとめ」、「Javaデータ構造とアルゴリズム教程」、「Java操作DOMノード技術のまとめ」、「Javaキャッシュ操作テクニックのまとめ
本論文で述べたように、皆さんのjavaプログラムの設計に役に立ちます。