반응형

 

 

 


[ JAVA TCP Server ]

 
import java.io.*;
import java.net.*;

public class TCPServer
{
    public static void main(String[] args) throws Exception
    {
        int                     nPort       = 30000;
        ServerSocket            sockServer  = new ServerSocket(nPort);

 
 
 
        while(true)
        {
            // 클라이언트가 접속하면 클라이언트 소켓을 반환한다.
            // 접속할 때까지 대기하게 된다.
            Socket              sockClient      = sockServer.accept();

            // 데이터 출력을 위한 스트림객체 생성
            // 먼저 클라이언트 소켓의 버퍼포인터를 받아오고
            // 그 버퍼포인터로 DataOutputStream객체를 생성한다.
            // DataOutputStream은 OutputStream을 상속받은 클레스
            OutputStream        os      = sockClient.getOutputStream();
            DataOutputStream    dos     = new DataOutputStream(os);

            for(int i=0; i<10; ++i)
            {
                dos.writeInt(i);
            }

            // 소켓을 닫는다.
            sockClient.close();
        }
    }
}

 
 
 
 
[ JAVA TCP Client ]
 

 

import java.io.*;
import java.net.*;

public class TCPClient
{
    public static void main(String[] args) throws Exception
    {
        // 주소와 포트번호로 소켓 생성
        String          strIP       = "127.0.0.1";
        int             nPort       = 30000;
        Socket          sockClient  = new Socket(strIP, nPort);

        // 데이터 입력을 위한 DataInputStream 생성
        // 자바는 통틀어 '버퍼'가 아니라 인풋과 아웃풋을 구분하고 있다는점이 신선
        InputStream     is          = sockClient.getInputStream();
        DataInputStream dis         = new DataInputStream(is);

        for(int i=0; i<10; ++i)
        {
            int nData = dis.readInt();
            System.out.println("서버로부터 받은 데이터 " + nData + "출력");
        }
        sockClient.close();
    }
}


 
 
[ JAVA UDP Sender ]
 

 


import java.net.*;

public class UDPSender
{
    public static void main(String[] args) throws Exception
    {
        // 소켓, 주소, 포트번호를 설정
        DatagramSocket      sockUDP     = new DatagramSocket();
        InetAddress         addrDes     = InetAddress.getByName("127.0.0.1");
        int                 nPort       = 30000;

        // 보낼 데이터를 byte형 버퍼로...
        String              strString   = "보내는 데이터";
        byte[]              byBuffer    = strString.getBytes();

        // UDP Packet객체 생성(버퍼, 버퍼길이, 주소, 포트번호)
        DatagramPacket      UDPPacket
 
            = new DatagramPacket(byBuffer, byBuffer.length, addrDes, nPort);

        // UDP Socket으로 전송
        sockUDP.send(UDPPacket);
    }
}
 

 
 
[ JAVA UDP Receiver ]
 

 

import java.net.*;

public class UDPReceiver
{
    private final static int    BUFSIZE = 30;


    public static void main(String[] args) throws Exception
    {
        // 포트번호로 UDP소켓을 생성
        int                 nPort       = 30000;
        DatagramSocket      UDPSocket   = new DatagramSocket(nPort);

        while(true)
        {
            // 어차피 버퍼는 다 byte
            // DatagramPacket에 주소와 포트번호를 넣어줄 필요는 없다. (센드용이 아니므로)
            byte[]          byBuffer    = new byte[BUFSIZE];
            DatagramPacket  UDPPacket   = new DatagramPacket(byBuffer, byBuffer.length);
            UDPSocket.receive(UDPPacket);

            // 페킷.getData()로 byte[]를 얻어와 바로 문자열로 변환
            String          strTemp     = new String(UDPPacket.getData());
            System.out.println("수신된 데이터 : " + strTemp);
        }
    }
}


 

반응형
Posted by 공간사랑
,