[ Java ] Server-Client 연결 (오픈캔버스)

ekdud1660의 이미지

Server와 Client를 연결해서 Client에서 Frame을 생성하고 거기서 그린 그림의 좌표를 String으로 만들어 Server측에 보내서 다시 그 좌표 정보를 이용하여 x,y에 각각 대입하여 점을 찍으려고합니다.
즉, Client에서 그린 그림을 그대로 Server측 Frame에 그리려고 하는데 각각 디버깅하면 처음 찍은 점만 보내지네요.
그리고 Client 측에 제가 그린 그림이 보이지 않네요. 해결팁 좀 도움주세요.\

-----------------------------------클라이언트 코드-----------------------------------
package client;
 
public class Client {
	public static void main(String[] args) {
		Sender sender = new Sender(); 
		Drawer drawer = new Drawer(sender.getOutputStream());
	}
}
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
package client;
 
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
 
public class Sender {
	private DataOutputStream out;//����
 
	public Sender(){
		Thread senderThread = new Thread(new Runnable() {
			public void run(){
				try{
					Socket socket = new Socket("155.230.29.155", 4444);
					System.out.println("클라이언트 시작");
					out = new DataOutputStream(socket.getOutputStream());
					System.out.println("데이터 보냈음");
					}catch(IOException e){
				}
			}
		});
 
		senderThread.start();
	}//sender method
 
	public DataOutputStream getOutputStream() {
		return out;
	}
 
}//Sender
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
package client;
 
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.io.DataOutputStream;
 
public class Drawer extends Frame implements MouseMotionListener, WindowListener
{
	int x = 0;
	int y = 0;
 
	Image img = null;
	Graphics gImg = null;
 
	private DataOutputStream mOutput;
 
	public Drawer(DataOutputStream out){
		mOutput = out;
		addMouseMotionListener(this);		
 
		setTitle("Client");
		pack();
		setBounds(100,100,500,500);
		setVisible(true);
 
		img = createImage(500,500);
		gImg = img.getGraphics();
		gImg.drawString("마우스 왼쪽을 눌러 그리세요",10,50);
	}//MakeFrame
 
 
 
	public void mouseDragged(MouseEvent me){
		if(me.getModifiersEx() == MouseEvent.BUTTON1_DOWN_MASK){
			x = me.getX();
			y = me.getY();
			gImg.drawString("*", x, y);
			while(mOutput!=null)
			{
				try{
					String cdn = "x:"+x+","+"y:"+y;
					System.out.println("string생성 :"+"("+x+","+y+")");
					mOutput.writeUTF(cdn);
				}catch(Exception e){}
			}
			repaint();//class.x
		}
	}//mouseDragged
 
 
	public void paint(Graphics g){
		if(img!=null)
			g.drawImage(img, 0,0,this);
	} //Paint
 
	public void mouseMoved(MouseEvent e) {
	}
	public void windowActivated(WindowEvent e) {
	}
	public void windowClosed(WindowEvent e) {
	}
	public void windowClosing(WindowEvent e) {
		System.exit(0);
	}
	public void windowDeactivated(WindowEvent e) {
	}
	public void windowDeiconified(WindowEvent e) {
	}
	public void windowIconified(WindowEvent e) {
	}
	public void windowOpened(WindowEvent e) {
	}
}//class
 
-------------------------------서버측코드---------------------------------------
 
package server;
 
public class Server {
	public static void main(String args[])
	{
		Receiver r = new Receiver();
	}//mains
}
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
package server;
 
 
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.MouseMotionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.io.DataInputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
 
public class Receiver extends Frame implements WindowListener{
 
	Socket socket;
	DataInputStream is;
 
	Image img = null;
	Graphics gImg = null;
 
	int x=0;
	int y=0;
 
	public void paint(Graphics g){
		if(img!=null)
			g.drawImage(img, 0,0,this);
	} //Paint
 
	public Receiver(){
		Thread acceptThread = new Thread(new Runnable() {
			public void run() {
				try {
					ServerSocket serverSocket = new ServerSocket(4444);
					System.out.println("서버소켓생성 완료"); //������ ������ ��!
					while ( !Thread.currentThread().isInterrupted() ) {
 
						System.out.println("접속준비중");
 
						socket = serverSocket.accept();
						System.out.println("접속완료");
						is = new DataInputStream(socket.getInputStream());
 
						setTitle("Server");
						pack();
						setBounds(100,100,500,500); 
						setVisible(true);
 
						img = createImage(500,500);
						gImg = img.getGraphics();
						gImg.drawString("상대방그림",10,50);
 
 
						try{
							System.out.println("받은 데이터 : "+is.readUTF());
							String cdn = is.readUTF();
							String[] a = cdn.split(",");
							for(int i=0;i<2;i++)
							{
								String[] v = a[i].split(":");
								if(v[0].equals("x")){
									x = Integer.parseInt(v[1]);
								}else if(v[0].equals("y")){
									y = Integer.parseInt(v[1]);	
								}//if
 
								gImg.fillOval(x-5/2, y-5/2, 5, 5);
								repaint();
							}//for	
						}catch(IOException e){}//try
						paint(gImg);
					}
				} catch (IOException e1) {
					e1.printStackTrace();
				}
			}
		});
		acceptThread.start();		
	}//Receiver Method
 
	@Override
	public void windowActivated(WindowEvent arg0) {
	}
	@Override
	public void windowClosed(WindowEvent arg0) {
	}
	@Override
	public void windowClosing(WindowEvent arg0) {
		System.exit(0);
	}
	@Override
	public void windowDeactivated(WindowEvent arg0) {
	}
	@Override
	public void windowDeiconified(WindowEvent arg0) {
	}
	@Override
	public void windowIconified(WindowEvent arg0) {
	}
	@Override
	public void windowOpened(WindowEvent arg0) {
	}		
}//Receiver Class

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.