개발/JAVA
[JAVA]TCP/IP Server 소켓통신 byte를 이용한 hex값 출력
sarah.together
2021. 8. 22. 14:09
반응형
자바의 TCP/IP 소켓통신 예제샘플이 대부분 스트링을 이용한 채팅 예제인지라. byte를 이용한 hex값 통신
[소스] TcpSockServer
/**
* TCP/IP 서버모듈 (tcp client에서 받은데이터를 server sock모듈을 통해 상단에 전달)
*
* 작성일자: 2013. 06. 26
* 작성자명: HwangKyuseok (황규석)
* */
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class TcpSockServer {
private ServerSocket serversock;
/** *********************************************************************************
* 생성자함수
* @param iport: 서버포트
* *********************************************************************************/
public TcpSockServer(int iport) {
//서버소켓 생성
try {
System.out.println("[서버실행]");
serversock = new ServerSocket(iport);
//무한 루프로 클라이언트의 요청을 반복적으로 처리
while(true) {
System.out.println("[클라이언트 접속을 위한 대기중...]");
Socket sock = serversock.accept();
System.out.println("[클라이언트 IP '" + sock.getInetAddress() + "' 접속됨 ]");
// 클라이언트와 통신할 쓰레드생성
TcpSockServer_read st = new TcpSockServer_read(sock);
st.start();
}
} catch(IOException e) {
e.printStackTrace();
}
}
/** *********************************************************************************
* [사용예]
* **********************************************************************************/
public static void main(String[] args) {
new TcpSockServer(9001);
}
[소스] TcpSockSrver_read
.
/**
* 소켓을 통해 각각의 클라이언트와 통신 연결, 클라이언트의 입력 데이터처리
* 작성일자: 2013년 06월 27일
* 작성자명: HwangKyuseok (황규석)
* */
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
public class TcpSockServer_read extends Thread {
Socket sock = null;
DataOutputStream dos;
DataInputStream dis;
//읽기버퍼
byte[] rbuff = new byte[1024];
int rbuff_cnt =0;
//연결된 클라이언트 아이피
String sip = null;
/** *********************************************************************************
* 생성자 함수 (소켓연결)
* *********************************************************************************/
TcpSockServer_read(Socket sock)
{
this.sock = sock;
sip = sock.getInetAddress().toString();
}
/** *********************************************************************************
* 쓰레드 (루프처리)
* *********************************************************************************/
public void run()
{
try {
try {
// 클라이언트와 문자열 통신을 위한 스트림 생정
dos = new DataOutputStream(sock.getOutputStream());
dis = new DataInputStream(sock.getInputStream());
while(true) {
//Thread.sleep(1);
rbuff_cnt = dis.read(rbuff);
fn_testDisplay(rbuff,rbuff_cnt);
}
}
finally {
dis.close();
dos.close();
sock.close();
}
}
catch(IOException e){
System.out.println("클라이언트 IP '" + sip + "' 접속종료");
}
}
/** *********************************************************************************
* test용 디스플레이
* *********************************************************************************/
private void fn_testDisplay(byte buf[], int 갯수)
{
int i;
System.out.print("수신데이터: ");
for(i=0; i<갯수 ;i++) System.out.print(String.format("0x%02X ", buf[i]));
System.out.println("");
}
}
[실행결과화면]
[서버실행]
[클라이언트 접속을 위한 대기중...]
[클라이언트 IP '/172.16.0.61' 접속됨 ]
[클라이언트 접속을 위한 대기중...]
수신데이터: 0x00 0x02 0x00 0x00 0x00 0x06 0x01 0x03 0x00 0x00 0x00 0x21
수신데이터: 0x00 0x02 0x00 0x00 0x00 0x06 0x01 0x03 0x00 0x00 0x00 0x21
수신데이터: 0x00 0x02 0x00 0x00 0x00 0x06 0x01 0x03 0x00 0x00 0x00 0x21
클라이언트 IP '/172.16.0.61' 접속종료
[참고하기 좋은책]
출처: http://hks003.tistory.com/130 [황규석 I'm third rate programmer]
반응형