본문 바로가기

IT일반과목/java

네트워크 수업1



==================================================================================

package kh.java.udp.model;


import java.io.IOException;

import java.net.DatagramPacket;

import java.net.DatagramSocket;

import java.net.InetAddress;

import java.net.SocketException;


public class UdpServer {

public void main() {

int serverPort = 8888;//서버의 UDP port

while(true) {

byte[] message = new byte[1024];//클라이언트 메세지 저장

try {

//DatagramSocket 객체 생성 -> 서버의 UDP포트 오픈

DatagramSocket ds = new DatagramSocket(serverPort);


//클라이언트로부터 전달받을 메세지를 저장할

//DatagramPacket 객체 생성

DatagramPacket in = new DatagramPacket(message,message.length);

//클라이언트 메세지 입력을 기다리고있다.

System.out.println("클라이언트 요청기다리는중");//현재 기다리고있는 상태이다.

ds.receive(in);//IOException예외처리없을땐 에러뜬다.

//받을 용도의 패킷을 만들것이다.

InetAddress ip = in.getAddress();//ip를 가져올려면 이거 사용해야한다.

//in의 주소를 얻어와서 ip에 넣어준다.

int clientport = in.getPort();

//in의 포트도저장이된다.

//클라이언트 IP,Port 정보 획득

//클라이언트가 보낸 데이터 저장

message=in.getData();//

//이렇게 하면 어느정도의 길이가 올지 몰라서 미리 할당을 해놓았다.

//System.out.println(message);

System.out.println(new String(message).trim());

//trim()은 뒤에 안쓰는 데이터는 자동으로 날려준다.

//String str=new String(message);      sysout(str.trim()); 이렇게 해줘도 동일하다.

String sendMessage = "UDP Socket Test";

//클라이언트한테 보낼 메세지

byte[] outMessage = sendMessage.getBytes();//바이트형배열에 한글자씩 들어간다.

//클라이언트에게 보낼 메세지를 byte배열에 추가

DatagramPacket out = new DatagramPacket(outMessage,outMessage.length,ip,clientport);

//클라이언트에게 보낼 DatagramPacket 생성

//들어오는 경우엔 ip랑 포트를 지정을 안해주었다. 

//내보낼때는 정보를 다 줘야한다.

//어떤 정보를 주냐면

//이제 만들어놓은 DatagramPacket를 보내줘야한다.

ds.send(out);//out이라고 전해준다는 것이다.

System.out.println("메세지 전송 완료");

ds.close();//쓰고난 소켓을 닫아주었다.

} catch (SocketException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}


}

}

}


===================================================================

package kh.java.udp.model;


import java.io.IOException;

import java.net.DatagramPacket;

import java.net.DatagramSocket;

import java.net.InetAddress;

import java.net.SocketException;

import java.net.UnknownHostException;


public class UdpClient {

public void main() {

try {

//DatagramSocket 생성

DatagramSocket ds = new DatagramSocket(7777);

//UDP 서버 아이피 입력용 객체생성

InetAddress ip = InetAddress.getByName("localhost");//192.168.30.6이라고 보통적고//나자신을 적을땐 127.0.0.1적으면 된다.

String str="서버님 데이터좀";

//서버에서 데이터 받을려고 저장

//바이트 배열에 만들어 전달할것이다.

byte [] message = new byte[10240];

DatagramPacket out = new DatagramPacket(str.getBytes(),str.getBytes().length,ip,8888);

//클라이언트 아웃은 서버한테 인이다.

//서버에 전달을 해줘야 하니 서버ip알아야하니

ds.send(out);//입출력에러잡기

DatagramPacket in = new DatagramPacket(message,message.length);

ds.receive(in);

System.out.println("서버 메세지 기다리는중........");

message=in.getData();//서버가 준 데이터를 message에 넣었다.

System.out.println(new String(message).trim());//뒤에꺼 다버릴려고 trim()썼다.

ds.close();

System.out.println("완료");

} catch (SocketException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (UnknownHostException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}


}

}


=========================================================

package kh.java.udp.run;


import kh.java.udp.model.UdpClient;


public class Run {

public static void main(String[] args) {

UdpClient uc = new UdpClient();

uc.main();

}

}


=======================================================

package kh.java.udp.run;


import kh.java.udp.model.UdpServer;


public class Start {

public static void main(String[] args) {

UdpServer us =new  UdpServer();

us.main();

}

}