==================================================================================
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();
}
}
'IT일반과목 > java' 카테고리의 다른 글
네트워크 수업3 (야구게임) (과제) (0) | 2018.08.09 |
---|---|
네트워크 수업2 (0) | 2018.08.09 |
네트워크 기초 (집공부) (0) | 2018.08.08 |
직렬화 역직렬화 (집공부) (0) | 2018.08.08 |
20180808 학원에서 네트워크 들어가기전에 개념 설명,직렬화 (0) | 2018.08.08 |