javaで絵チャットを作っています。
初めての投稿です。よろしくお願いします。
javaで絵チャットを作っているのですが、うまく片方で書いた絵をもう片方に送って描画することがうまくいっていません。
一応、チャットはうまくいって入るのですが。。。。。座標を一度文字列に直してチャットの文字列と区別するのに座標は文字列の頭に%%%をつけて送信しています。
教えてください。よろしくお願いします。
/ChatServer/
/* 引数の文字列を全てのチャネルに出力する */
synchronized void broadcast(String s) {
int i, n;
MyChannel mchannel;
// 全チャネルに対して文字列を送信
for (i = 0, n = channelSet.size(); i < n; i++) {
mchannel = (MyChannel) channelSet.get(i);
// チャネルが有効なら送信、無効ならチャネルを除去
if (mchannel.alive) {
if(s.startsWith("%%%"))
mchannel.sendObj(s);
else
mchannel.sendStr(s);
} else {
channelSet.remove(i);
i--;
n--;
}}
/ChatClient/
getContentPane().add(input = new JTextField(), BorderLayout.SOUTH);
// 送信処理
input.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ev) {
String s = input.getText();
input.setText("");
try {
// 改行文字を\r\nに統一する
if (s.endsWith("\r\n")) {
wt.write(s, 0, s.length());
} else {
if (s.endsWith("\n")) {
wt.write(s, 0, s.length() - 1);
} else {
wt.write(s, 0, s.length());
}
wt.write('\r');
wt.write('\n');
}
// バッファをフラッシュする
wt.flush();
} catch (IOException e) {
new RuntimeException();
}}});
// 受信処理
public void run() {
String str;
try {
while (true) {
str = rd.readLine();
System.out.println(str);// 確認用
/* 座標の要素かテキストの要素かを判定する */
/* 座標を操作 */
if (str.startsWith("%%%")) {
String[] strAry = str.split(",");
// 分割された文字列の表示
for (int i = 0; i < strAry.length; i++) {
System.out.println(strAry[i]);
}
/* Stringをint型に変換 */
mc.mode = Integer.parseInt(strAry[1]);
mc.PX = Integer.parseInt(strAry[2]);
mc.PY = Integer.parseInt(strAry[3]);
mc.x = Integer.parseInt(strAry[4]);
mc.y = Integer.parseInt(strAry[5]);
mc.RX = Integer.parseInt(strAry[6]);
mc.RY = Integer.parseInt(strAry[7]);
repaint();
} else {
log.append(str + '\n');
log.setCaretPosition(log.getText().length());// スクロールバーを手動で下げる
}
}
} catch (IOException e) {
new RuntimeException();
}
/MyCanvas/
public void sender() { // サーバとチャンネルに送信する
try {
/* intをStringに変換 */
String strmode = String.valueOf(mode);
String strPX = String.valueOf(PX);
String strPY = String.valueOf(PY);
String strX = String.valueOf(x);
String strY = String.valueOf(y);
String strRX = String.valueOf(RX);
String strRY = String.valueOf(RY);
String Zahyou = new String("%%%" + "," + strmode + "," + strPX+ "," + strPY + "," + strX + "," + strY + "," + strRX + ","+ strRY);
System.out.println(Zahyou);
mchnl.sendObj(Zahyou);
} catch (Exception e) {
new RuntimeException();
}}
/MyChannel/
/* クライアントへ文字列を出力する */
synchronized void sendStr(String str) {
//System.out.println("sending String info from server to client");
try {
// 改行文字を\r\nに統一する
if (str.endsWith("\r\n")) {
wt.write(str, 0, str.length());
} else {
if (str.endsWith("\n")) {
wt.write(str, 0, str.length() - 1);
} else {
wt.write(str, 0, str.length());
}
wt.write('\r');
wt.write('\n');
}
wt.flush();
} catch (IOException e) {
disconnect();
}
}
/* クライアントへ座標を出力する */
synchronized void sendObj(String Zahyou) {
try {
if(Zahyou.endsWith("\r\n")){
wt.write(Zahyou, 0, Zahyou.length());
}else{
if (Zahyou.endsWith("\n")) {
wt.write(Zahyou, 0, Zahyou.length() - 1);
} else {
wt.write(Zahyou, 0, Zahyou.length());
}
wt.write('\r');
wt.write('\n');
}
wt.flush();
} catch (IOException e) {
disconnect();
}
}
/* クライアントからの入力を受け付ける */
public void run() {
String str;
InputStreamReader in;
try { // ソケットから入出力ストリームを得る
rd = new BufferedReader(new InputStreamReader(socket.getInputStream()));
wt = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
// ユーザー名を入力してもらう
sendStr(" 名前を入力してください ");
handle = rd.readLine();
// 入力待ちのループ
while (true) {
// 文字列入力を待つ
str = rd.readLine();
/*座標の要素かテキストの要素かを判別*/
if (str.startsWith("%%%")) {chatsv.broadcast(str);
} else
chatsv.broadcast("[" + handle + "] " + str);
}
お礼
ありがとうございます、状況はまさにその通りです。 大変参考になりました。がんばってみます・・