初めての投稿です。よろしくお願いします。
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);
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# str[j++]の意味 2 2022/08/30 16:20
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- C言語・C++・C# c言語配列の結合についてです。 なぜうまくいかないのでしょうか。 #include <stdio.h 4 2022/05/30 22:42
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- C言語・C++・C# C# DatagridviewにExcelシートを反映するとエラーが出る 2 2023/05/06 17:12
- Ruby 【JAVA】数字をひし形に出力するプログラムについて 2 2022/07/11 23:32
- C言語・C++・C# C# で、あるフォルダー内にあるすべてのテキストファイルを別のフォルダーにコピーする。 4 2022/11/21 13:23
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エンターキーを押すとOKボタン...
-
ペイントソフトを作っているの...
-
GetDIBits関数の使い方について
-
C#で、あるクラスのメンバーす...
-
C#から、C++で作成したdll内の...
-
マルチスレッドプログラムから...
-
大量のデータを読み込んで表示...
-
JButtonの画像をactionPerforme...
-
C#で別のFormへ複数の値を返そ...
-
Junitテストでvoid戻り値メッソ...
-
C# LISTBOXの複数項目取得
-
C# visibleプロパティをfalseに...
-
struts2のchainで値の受け渡し...
-
Javaの課題について質問です。...
-
パスがとおらない・・・
-
unityでのC++エラーの原因がわ...
-
Log4jで機能毎に別ファイルへ出...
-
flush()とclose()について
-
C言語のポインターに関する警告
-
IF関数でEmpty値を設定する方法。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
大量のデータを読み込んで表示...
-
ボタンの複数割り当てについて
-
C#で、あるクラスのメンバーす...
-
Junitテストでvoid戻り値メッソ...
-
C#でのWNetAddConnection3の使...
-
C# 矢印キーの取得
-
Thread.sleepのInterruptedExce...
-
unityでのC++エラーの原因がわ...
-
C#で別のFormへ複数の値を返そ...
-
C# visibleプロパティをfalseに...
-
エンターキーを押すとOKボタン...
-
Processingでマウスクリックで...
-
[C#.net]スレッド化された別フ...
-
C#でキーイベントが発生しない...
-
C# DataGridView列カスタマイズ
-
【C#】ソースコードをファイル...
-
LVM_SETITEMSTATEでListViewの...
-
GetDIBits関数の使い方について
-
未割り当てのローカル変数
-
C# MouseHoverを何度も呼ぶには
おすすめ情報