JAVA TCP Server / JAVA TCP Client / JAVA UDP Sender / JAVA UDP Receiver
programming/JAVA_JSP 2014. 1. 8. 22:58
[ 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);
}
}
}