// クライアントプログラム
import java.io.*;
import java.util.*;
import java.net.*;
import javax.swing.*;
class MessageWindow
extends JFrame { MessageWindow() {
super("Messages");
textArea.setEditable(false);
add(textArea);
pack();
setVisible(true);
}
public void printMessage
(String message
) { textArea.append(message+"\n");
}
}
public class ChatCl {
byte[] buf = new byte[ChatParam.MSIZE];
byte[] send = new byte[ChatParam.MSIZE];
byte[] cbuf;
public static void main
(String[] args
) { try {
new ChatCl().start(args);
}
}
public void start
(String[] args
) {
if (args.length < 2) {
System.
out.
println("引数: サーバ名 ユーザ名"); }
try {
/* サーバへの接続処理 */
System.
out.
println("[Input]----------------------------------");
MessageWindow mwin = new MessageWindow();
@Override
public void run() {
try {
while(true){
// メッセージを受信して、bufの中に保存
int count = is.read(buf);
if (count > 0) {
switch (buf[0]) {
case ChatParam.LEAVE:
str
= new String(buf,
1, ChatParam.
MSIZE - 1); mwin.printMessage(str.substring(0, str.indexOf(0)));
break;
case ChatParam.FULL:
System.
out.
println("現在人数制限に達しています"); break;
case ChatParam.JOIN:
case ChatParam.MSG:
str
= new String(buf,
1, ChatParam.
MSIZE - 1); mwin.printMessage(str.substring(0, str.indexOf(0)));
}
}
}
}
}
});
// 最初に参加要求(+ユーザ名)の送信
send[0] = ChatParam.JOIN;
cbuf = name.getBytes();
System.
arraycopy(cbuf,
0, send,
1,
(cbuf.
length < ChatParam.
NSIZE)?cbuf.
length:ChatParam.
NSIZE); os.write(send);
// 以下は他の参加者からのメッセージを受信する部分ですが、現状は
// flagをfalseにして処理をスキップしています。
messageReceiveProcess.start();
// 以下の部分はメッセージを送信する部分で、他の参加者からのメッセージ
// を受信する部分とは並列にする必要があります。
while (true) {
send[0] = ChatParam.MSG;
str = name + ":" + input.readLine() + "\0";
// mwin.printMessage(str);
cbuf = str.getBytes();
System.
arraycopy(cbuf,
0, send,
1,
(cbuf.
length < ChatParam.
MSIZE - 1)?cbuf.
length:(ChatParam.
MSIZE - 1));
/* send内のデータを送信 */
os.write(send);
}
/* 通信終了処理 */
// sock.close();
System.
out.
println("connection error"); }
}
}
Ly8g44Kv44Op44Kk44Ki44Oz44OI44OX44Ot44Kw44Op44OgCgppbXBvcnQgamF2YS5pby4qOwppbXBvcnQgamF2YS51dGlsLio7CmltcG9ydCBqYXZhLm5ldC4qOwppbXBvcnQgamF2YXguc3dpbmcuKjsKCmNsYXNzIE1lc3NhZ2VXaW5kb3cgZXh0ZW5kcyBKRnJhbWUgewogIEpUZXh0QXJlYSB0ZXh0QXJlYTsKICBNZXNzYWdlV2luZG93KCkgewogICAgc3VwZXIoIk1lc3NhZ2VzIik7CiAgICB0ZXh0QXJlYSA9IG5ldyBKVGV4dEFyZWEoMjUsIDgwKTsKICAgIHRleHRBcmVhLnNldEVkaXRhYmxlKGZhbHNlKTsKICAgIGFkZCh0ZXh0QXJlYSk7CiAgICBwYWNrKCk7CiAgICBzZXRWaXNpYmxlKHRydWUpOwogIH0KCiAgcHVibGljIHZvaWQgcHJpbnRNZXNzYWdlKFN0cmluZyBtZXNzYWdlKSB7CiAgICB0ZXh0QXJlYS5hcHBlbmQobWVzc2FnZSsiXG4iKTsKICB9Cn0KCgpwdWJsaWMgY2xhc3MgQ2hhdENsIHsKCiAgYnl0ZVtdIGJ1ZiA9IG5ldyBieXRlW0NoYXRQYXJhbS5NU0laRV07CiAgYnl0ZVtdIHNlbmQgPSBuZXcgYnl0ZVtDaGF0UGFyYW0uTVNJWkVdOwogIGJ5dGVbXSBjYnVmOwogIFN0cmluZyBzdHI7CgogIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgIHRyeSB7CiAgICAgIG5ldyBDaGF0Q2woKS5zdGFydChhcmdzKTsKICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKICAgICAgU3lzdGVtLm91dC5wcmludGxuKGUpOwogICAgfQogIH0KCiAgcHVibGljIHZvaWQgc3RhcnQoU3RyaW5nW10gYXJncykgewoKICAgIGlmIChhcmdzLmxlbmd0aCA8IDIpIHsKICAgICAgU3lzdGVtLm91dC5wcmludGxuKCLlvJXmlbA6IOOCteODvOODkOWQjSDjg6bjg7zjgrblkI0iKTsKICAgICAgU3lzdGVtLmV4aXQoMSk7CiAgICB9CgogICAgdHJ5IHsKICAgICAgLyog44K144O844OQ44G444Gu5o6l57aa5Yem55CGICovCiAgICAgIFN0cmluZyBob3N0TmFtZSA9IGFyZ3NbMF07CiAgICAgIFNvY2tldCBzb2NrID0gbmV3IFNvY2tldChob3N0TmFtZSwgQ2hhdFBhcmFtLlBPUlQpOwogICAgICBCdWZmZXJlZFJlYWRlciBpbnB1dCA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoU3lzdGVtLmluKSk7CiAgICAgIFN0cmluZyBuYW1lID0gYXJnc1sxXTsKICAgICAgSW5wdXRTdHJlYW0gaXMgPSBzb2NrLmdldElucHV0U3RyZWFtKCk7CiAgICAgIE91dHB1dFN0cmVhbSBvcyA9IHNvY2suZ2V0T3V0cHV0U3RyZWFtKCk7CgogICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltJbnB1dF0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIik7CgogICAgICBNZXNzYWdlV2luZG93IG13aW4gPSBuZXcgTWVzc2FnZVdpbmRvdygpOwoKICAgICAgVGhyZWFkIG1lc3NhZ2VSZWNlaXZlUHJvY2VzcyA9IG5ldyBUaHJlYWQobmV3IFJ1bm5hYmxlKCl7CiAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgewogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgd2hpbGUodHJ1ZSl7CiAgICAgICAgICAgICAgLy8g44Oh44OD44K744O844K444KS5Y+X5L+h44GX44Gm44CBYnVm44Gu5Lit44Gr5L+d5a2YCiAgICAgICAgICAgICAgaW50IGNvdW50ID0gaXMucmVhZChidWYpOwogICAgICAgICAgICAgIGlmIChjb3VudCA+IDApIHsKICAgICAgICAgICAgICAgIHN3aXRjaCAoYnVmWzBdKSB7CiAgICAgICAgICAgICAgICAgIGNhc2UgQ2hhdFBhcmFtLkxFQVZFOgogICAgICAgICAgICAgICAgICAgIHN0ciA9IG5ldyBTdHJpbmcoYnVmLCAxLCBDaGF0UGFyYW0uTVNJWkUgLSAxKTsKICAgICAgICAgICAgICAgICAgICBtd2luLnByaW50TWVzc2FnZShzdHIuc3Vic3RyaW5nKDAsIHN0ci5pbmRleE9mKDApKSk7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgIGNhc2UgQ2hhdFBhcmFtLkZVTEw6CiAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCLnj77lnKjkurrmlbDliLbpmZDjgavpgZTjgZfjgabjgYTjgb7jgZkiKTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgY2FzZSBDaGF0UGFyYW0uSk9JTjoKICAgICAgICAgICAgICAgICAgY2FzZSBDaGF0UGFyYW0uTVNHOgogICAgICAgICAgICAgICAgICAgIHN0ciA9IG5ldyBTdHJpbmcoYnVmLCAxLCBDaGF0UGFyYW0uTVNJWkUgLSAxKTsKICAgICAgICAgICAgICAgICAgICBtd2luLnByaW50TWVzc2FnZShzdHIuc3Vic3RyaW5nKDAsIHN0ci5pbmRleE9mKDApKSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9Y2F0Y2goRXhjZXB0aW9uIGUpewogICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oZSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9KTsKCiAgICAgIC8vIOacgOWIneOBq+WPguWKoOimgeaxgigr44Om44O844K25ZCNKeOBrumAgeS/oQogICAgICBzZW5kWzBdID0gQ2hhdFBhcmFtLkpPSU47CiAgICAgIGNidWYgPSBuYW1lLmdldEJ5dGVzKCk7CiAgICAgIFN5c3RlbS5hcnJheWNvcHkoY2J1ZiwgMCwgc2VuZCwgMSwgKGNidWYubGVuZ3RoIDwgQ2hhdFBhcmFtLk5TSVpFKT9jYnVmLmxlbmd0aDpDaGF0UGFyYW0uTlNJWkUpOwogICAgICBvcy53cml0ZShzZW5kKTsKCiAgICAgIC8vIOS7peS4i+OBr+S7luOBruWPguWKoOiAheOBi+OCieOBruODoeODg+OCu+ODvOOCuOOCkuWPl+S/oeOBmeOCi+mDqOWIhuOBp+OBmeOBjOOAgeePvueKtuOBrwogICAgICAvLyBmbGFn44KSZmFsc2XjgavjgZfjgablh6bnkIbjgpLjgrnjgq3jg4Pjg5fjgZfjgabjgYTjgb7jgZnjgIIKICAgICAgbWVzc2FnZVJlY2VpdmVQcm9jZXNzLnN0YXJ0KCk7CgogICAgICAvLyDku6XkuIvjga7pg6jliIbjga/jg6Hjg4Pjgrvjg7zjgrjjgpLpgIHkv6HjgZnjgovpg6jliIbjgafjgIHku5bjga7lj4LliqDogIXjgYvjgonjga7jg6Hjg4Pjgrvjg7zjgrgKICAgICAgLy8g44KS5Y+X5L+h44GZ44KL6YOo5YiG44Go44Gv5Lim5YiX44Gr44GZ44KL5b+F6KaB44GM44GC44KK44G+44GZ44CCCiAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgc2VuZFswXSA9IENoYXRQYXJhbS5NU0c7CiAgICAgICAgc3RyID0gbmFtZSArICI6IiArIGlucHV0LnJlYWRMaW5lKCkgKyAiXDAiOwogICAgICAgIC8vIG13aW4ucHJpbnRNZXNzYWdlKHN0cik7CiAgICAgICAgY2J1ZiA9IHN0ci5nZXRCeXRlcygpOwogICAgICAgIFN5c3RlbS5hcnJheWNvcHkoY2J1ZiwgMCwgc2VuZCwgMSwgKGNidWYubGVuZ3RoIDwgQ2hhdFBhcmFtLk1TSVpFIC0gMSk/Y2J1Zi5sZW5ndGg6KENoYXRQYXJhbS5NU0laRSAtIDEpKTsKCiAgICAgICAgLyogc2VuZOWGheOBruODh+ODvOOCv+OCkumAgeS/oSAqLwogICAgICAgIG9zLndyaXRlKHNlbmQpOwogICAgICB9CgogICAgICAvKiDpgJrkv6HntYLkuoblh6bnkIYgKi8KICAgICAgLy8gc29jay5jbG9zZSgpOwoKICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiY29ubmVjdGlvbiBlcnJvciIpOwogICAgICBTeXN0ZW0uZXhpdCgxKTsKICAgIH0KICB9Cn0=
Main.java:25: error: class ChatCl is public, should be declared in a file named ChatCl.java
public class ChatCl {
^
Main.java:27: error: cannot find symbol
byte[] buf = new byte[ChatParam.MSIZE];
^
symbol: variable ChatParam
location: class ChatCl
Main.java:28: error: cannot find symbol
byte[] send = new byte[ChatParam.MSIZE];
^
symbol: variable ChatParam
location: class ChatCl
Main.java:50: error: cannot find symbol
Socket sock = new Socket(hostName, ChatParam.PORT);
^
symbol: variable ChatParam
location: class ChatCl
Main.java:69: error: cannot find symbol
case ChatParam.LEAVE:
^
symbol: variable ChatParam
Main.java:70: error: cannot find symbol
str = new String(buf, 1, ChatParam.MSIZE - 1);
^
symbol: variable ChatParam
Main.java:73: error: cannot find symbol
case ChatParam.FULL:
^
symbol: variable ChatParam
Main.java:76: error: cannot find symbol
case ChatParam.JOIN:
^
symbol: variable ChatParam
Main.java:77: error: cannot find symbol
case ChatParam.MSG:
^
symbol: variable ChatParam
Main.java:78: error: cannot find symbol
str = new String(buf, 1, ChatParam.MSIZE - 1);
^
symbol: variable ChatParam
Main.java:90: error: cannot find symbol
send[0] = ChatParam.JOIN;
^
symbol: variable ChatParam
location: class ChatCl
Main.java:92: error: cannot find symbol
System.arraycopy(cbuf, 0, send, 1, (cbuf.length < ChatParam.NSIZE)?cbuf.length:ChatParam.NSIZE);
^
symbol: variable ChatParam
location: class ChatCl
Main.java:92: error: cannot find symbol
System.arraycopy(cbuf, 0, send, 1, (cbuf.length < ChatParam.NSIZE)?cbuf.length:ChatParam.NSIZE);
^
symbol: variable ChatParam
location: class ChatCl
Main.java:102: error: cannot find symbol
send[0] = ChatParam.MSG;
^
symbol: variable ChatParam
location: class ChatCl
Main.java:106: error: cannot find symbol
System.arraycopy(cbuf, 0, send, 1, (cbuf.length < ChatParam.MSIZE - 1)?cbuf.length:(ChatParam.MSIZE - 1));
^
symbol: variable ChatParam
location: class ChatCl
Main.java:106: error: cannot find symbol
System.arraycopy(cbuf, 0, send, 1, (cbuf.length < ChatParam.MSIZE - 1)?cbuf.length:(ChatParam.MSIZE - 1));
^
symbol: variable ChatParam
location: class ChatCl
16 errors